javi-forge 1.2.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.
- package/ci-local/ci-local.sh +20 -8
- package/package.json +1 -1
- package/ai-config/.skillignore +0 -15
- package/ai-config/AUTO_INVOKE.md +0 -300
- package/ai-config/agents/_TEMPLATE.md +0 -93
- package/ai-config/agents/business/api-designer.md +0 -1657
- package/ai-config/agents/business/business-analyst.md +0 -1331
- package/ai-config/agents/business/product-strategist.md +0 -206
- package/ai-config/agents/business/project-manager.md +0 -178
- package/ai-config/agents/business/requirements-analyst.md +0 -1277
- package/ai-config/agents/business/technical-writer.md +0 -1679
- package/ai-config/agents/creative/ux-designer.md +0 -205
- package/ai-config/agents/data-ai/ai-engineer.md +0 -487
- package/ai-config/agents/data-ai/analytics-engineer.md +0 -953
- package/ai-config/agents/data-ai/data-engineer.md +0 -173
- package/ai-config/agents/data-ai/data-scientist.md +0 -672
- package/ai-config/agents/data-ai/mlops-engineer.md +0 -814
- package/ai-config/agents/data-ai/prompt-engineer.md +0 -772
- package/ai-config/agents/development/angular-expert.md +0 -620
- package/ai-config/agents/development/backend-architect.md +0 -795
- package/ai-config/agents/development/database-specialist.md +0 -212
- package/ai-config/agents/development/frontend-specialist.md +0 -686
- package/ai-config/agents/development/fullstack-engineer.md +0 -668
- package/ai-config/agents/development/golang-pro.md +0 -338
- package/ai-config/agents/development/java-enterprise.md +0 -400
- package/ai-config/agents/development/javascript-pro.md +0 -422
- package/ai-config/agents/development/nextjs-pro.md +0 -474
- package/ai-config/agents/development/python-pro.md +0 -570
- package/ai-config/agents/development/react-pro.md +0 -487
- package/ai-config/agents/development/rust-pro.md +0 -246
- package/ai-config/agents/development/spring-boot-4-expert.md +0 -326
- package/ai-config/agents/development/typescript-pro.md +0 -336
- package/ai-config/agents/development/vue-specialist.md +0 -605
- package/ai-config/agents/infrastructure/cloud-architect.md +0 -472
- package/ai-config/agents/infrastructure/deployment-manager.md +0 -358
- package/ai-config/agents/infrastructure/devops-engineer.md +0 -455
- package/ai-config/agents/infrastructure/incident-responder.md +0 -519
- package/ai-config/agents/infrastructure/kubernetes-expert.md +0 -705
- package/ai-config/agents/infrastructure/monitoring-specialist.md +0 -674
- package/ai-config/agents/infrastructure/performance-engineer.md +0 -658
- package/ai-config/agents/orchestrator.md +0 -241
- package/ai-config/agents/quality/accessibility-auditor.md +0 -1204
- package/ai-config/agents/quality/code-reviewer-compact.md +0 -123
- package/ai-config/agents/quality/code-reviewer.md +0 -363
- package/ai-config/agents/quality/dependency-manager.md +0 -743
- package/ai-config/agents/quality/e2e-test-specialist.md +0 -1005
- package/ai-config/agents/quality/performance-tester.md +0 -1086
- package/ai-config/agents/quality/security-auditor.md +0 -133
- package/ai-config/agents/quality/test-engineer.md +0 -453
- package/ai-config/agents/specialists/api-designer.md +0 -87
- package/ai-config/agents/specialists/backend-architect.md +0 -73
- package/ai-config/agents/specialists/code-reviewer.md +0 -77
- package/ai-config/agents/specialists/db-optimizer.md +0 -75
- package/ai-config/agents/specialists/devops-engineer.md +0 -83
- package/ai-config/agents/specialists/documentation-writer.md +0 -78
- package/ai-config/agents/specialists/frontend-developer.md +0 -75
- package/ai-config/agents/specialists/performance-analyst.md +0 -82
- package/ai-config/agents/specialists/refactor-specialist.md +0 -74
- package/ai-config/agents/specialists/security-auditor.md +0 -74
- package/ai-config/agents/specialists/test-engineer.md +0 -81
- package/ai-config/agents/specialists/ux-consultant.md +0 -76
- package/ai-config/agents/specialized/agent-generator.md +0 -1190
- package/ai-config/agents/specialized/blockchain-developer.md +0 -149
- package/ai-config/agents/specialized/code-migrator.md +0 -892
- package/ai-config/agents/specialized/context-manager.md +0 -978
- package/ai-config/agents/specialized/documentation-writer.md +0 -1078
- package/ai-config/agents/specialized/ecommerce-expert.md +0 -1756
- package/ai-config/agents/specialized/embedded-engineer.md +0 -1714
- package/ai-config/agents/specialized/error-detective.md +0 -1034
- package/ai-config/agents/specialized/fintech-specialist.md +0 -1659
- package/ai-config/agents/specialized/freelance-project-planner-v2.md +0 -1988
- package/ai-config/agents/specialized/freelance-project-planner-v3.md +0 -2136
- package/ai-config/agents/specialized/freelance-project-planner-v4.md +0 -4503
- package/ai-config/agents/specialized/freelance-project-planner.md +0 -722
- package/ai-config/agents/specialized/game-developer.md +0 -1963
- package/ai-config/agents/specialized/healthcare-dev.md +0 -1620
- package/ai-config/agents/specialized/mobile-developer.md +0 -188
- package/ai-config/agents/specialized/parallel-plan-executor.md +0 -506
- package/ai-config/agents/specialized/plan-executor.md +0 -485
- package/ai-config/agents/specialized/solo-dev-planner-modular/00-INDEX.md +0 -485
- package/ai-config/agents/specialized/solo-dev-planner-modular/01-CORE.md +0 -3493
- package/ai-config/agents/specialized/solo-dev-planner-modular/02-SELF-CORRECTION.md +0 -778
- package/ai-config/agents/specialized/solo-dev-planner-modular/03-PROGRESSIVE-SETUP.md +0 -918
- package/ai-config/agents/specialized/solo-dev-planner-modular/04-DEPLOYMENT.md +0 -1537
- package/ai-config/agents/specialized/solo-dev-planner-modular/05-TESTING.md +0 -2633
- package/ai-config/agents/specialized/solo-dev-planner-modular/06-OPERATIONS.md +0 -5610
- package/ai-config/agents/specialized/solo-dev-planner-modular/INSTALL.md +0 -335
- package/ai-config/agents/specialized/solo-dev-planner-modular/QUICK-REFERENCE.txt +0 -215
- package/ai-config/agents/specialized/solo-dev-planner-modular/README.md +0 -260
- package/ai-config/agents/specialized/solo-dev-planner-modular/START-HERE.md +0 -379
- package/ai-config/agents/specialized/solo-dev-planner-modular/WORKFLOW-DIAGRAM.md +0 -355
- package/ai-config/agents/specialized/solo-dev-planner-modular/solo-dev-planner.md +0 -279
- package/ai-config/agents/specialized/template-writer.md +0 -347
- package/ai-config/agents/specialized/test-runner.md +0 -99
- package/ai-config/agents/specialized/vibekanban-smart-worker.md +0 -244
- package/ai-config/agents/specialized/wave-executor.md +0 -138
- package/ai-config/agents/specialized/workflow-optimizer.md +0 -1114
- package/ai-config/commands/git/changelog.md +0 -32
- package/ai-config/commands/git/ci-local.md +0 -70
- package/ai-config/commands/git/commit.md +0 -35
- package/ai-config/commands/git/fix-issue.md +0 -23
- package/ai-config/commands/git/pr-create.md +0 -42
- package/ai-config/commands/git/pr-review.md +0 -50
- package/ai-config/commands/git/worktree.md +0 -39
- package/ai-config/commands/refactoring/cleanup.md +0 -24
- package/ai-config/commands/refactoring/dead-code.md +0 -40
- package/ai-config/commands/refactoring/extract.md +0 -31
- package/ai-config/commands/testing/e2e.md +0 -30
- package/ai-config/commands/testing/tdd.md +0 -36
- package/ai-config/commands/testing/test-coverage.md +0 -30
- package/ai-config/commands/testing/test-fix.md +0 -24
- package/ai-config/commands/workflow/generate-agents-md.md +0 -85
- package/ai-config/commands/workflow/planning.md +0 -47
- package/ai-config/commands/workflows/compound.md +0 -89
- package/ai-config/commands/workflows/diagnose.md +0 -70
- package/ai-config/commands/workflows/discover.md +0 -86
- package/ai-config/commands/workflows/plan.md +0 -77
- package/ai-config/commands/workflows/review.md +0 -78
- package/ai-config/commands/workflows/work.md +0 -75
- package/ai-config/config.yaml +0 -18
- package/ai-config/hooks/_TEMPLATE.md +0 -96
- package/ai-config/hooks/block-dangerous-commands.md +0 -75
- package/ai-config/hooks/commit-guard.md +0 -90
- package/ai-config/hooks/context-loader.md +0 -73
- package/ai-config/hooks/improve-prompt.md +0 -91
- package/ai-config/hooks/learning-log.md +0 -72
- package/ai-config/hooks/model-router.md +0 -86
- package/ai-config/hooks/secret-scanner.md +0 -64
- package/ai-config/hooks/skill-validator.md +0 -102
- package/ai-config/hooks/task-artifact.md +0 -114
- package/ai-config/hooks/validate-workflow.md +0 -100
- package/ai-config/prompts/base.md +0 -71
- package/ai-config/prompts/modes/debug.md +0 -34
- package/ai-config/prompts/modes/deploy.md +0 -40
- package/ai-config/prompts/modes/research.md +0 -32
- package/ai-config/prompts/modes/review.md +0 -33
- package/ai-config/prompts/review-policy.md +0 -79
- package/ai-config/skills/_TEMPLATE.md +0 -157
- package/ai-config/skills/backend/api-gateway/SKILL.md +0 -254
- package/ai-config/skills/backend/bff-concepts/SKILL.md +0 -239
- package/ai-config/skills/backend/bff-spring/SKILL.md +0 -364
- package/ai-config/skills/backend/chi-router/SKILL.md +0 -396
- package/ai-config/skills/backend/error-handling/SKILL.md +0 -255
- package/ai-config/skills/backend/exceptions-spring/SKILL.md +0 -323
- package/ai-config/skills/backend/fastapi/SKILL.md +0 -302
- package/ai-config/skills/backend/gateway-spring/SKILL.md +0 -390
- package/ai-config/skills/backend/go-backend/SKILL.md +0 -457
- package/ai-config/skills/backend/gradle-multimodule/SKILL.md +0 -274
- package/ai-config/skills/backend/graphql-concepts/SKILL.md +0 -352
- package/ai-config/skills/backend/graphql-spring/SKILL.md +0 -398
- package/ai-config/skills/backend/grpc-concepts/SKILL.md +0 -283
- package/ai-config/skills/backend/grpc-spring/SKILL.md +0 -445
- package/ai-config/skills/backend/jwt-auth/SKILL.md +0 -412
- package/ai-config/skills/backend/notifications-concepts/SKILL.md +0 -259
- package/ai-config/skills/backend/recommendations-concepts/SKILL.md +0 -261
- package/ai-config/skills/backend/search-concepts/SKILL.md +0 -263
- package/ai-config/skills/backend/search-spring/SKILL.md +0 -375
- package/ai-config/skills/backend/spring-boot-4/SKILL.md +0 -172
- package/ai-config/skills/backend/websockets/SKILL.md +0 -532
- package/ai-config/skills/data-ai/ai-ml/SKILL.md +0 -423
- package/ai-config/skills/data-ai/analytics-concepts/SKILL.md +0 -195
- package/ai-config/skills/data-ai/analytics-spring/SKILL.md +0 -340
- package/ai-config/skills/data-ai/duckdb-analytics/SKILL.md +0 -440
- package/ai-config/skills/data-ai/langchain/SKILL.md +0 -238
- package/ai-config/skills/data-ai/mlflow/SKILL.md +0 -302
- package/ai-config/skills/data-ai/onnx-inference/SKILL.md +0 -290
- package/ai-config/skills/data-ai/powerbi/SKILL.md +0 -352
- package/ai-config/skills/data-ai/pytorch/SKILL.md +0 -274
- package/ai-config/skills/data-ai/scikit-learn/SKILL.md +0 -321
- package/ai-config/skills/data-ai/vector-db/SKILL.md +0 -301
- package/ai-config/skills/database/graph-databases/SKILL.md +0 -218
- package/ai-config/skills/database/graph-spring/SKILL.md +0 -361
- package/ai-config/skills/database/pgx-postgres/SKILL.md +0 -512
- package/ai-config/skills/database/redis-cache/SKILL.md +0 -343
- package/ai-config/skills/database/sqlite-embedded/SKILL.md +0 -388
- package/ai-config/skills/database/timescaledb/SKILL.md +0 -320
- package/ai-config/skills/docs/api-documentation/SKILL.md +0 -293
- package/ai-config/skills/docs/docs-spring/SKILL.md +0 -377
- package/ai-config/skills/docs/mustache-templates/SKILL.md +0 -190
- package/ai-config/skills/docs/technical-docs/SKILL.md +0 -447
- package/ai-config/skills/frontend/astro-ssr/SKILL.md +0 -441
- package/ai-config/skills/frontend/frontend-design/SKILL.md +0 -54
- package/ai-config/skills/frontend/frontend-web/SKILL.md +0 -368
- package/ai-config/skills/frontend/mantine-ui/SKILL.md +0 -396
- package/ai-config/skills/frontend/tanstack-query/SKILL.md +0 -439
- package/ai-config/skills/frontend/zod-validation/SKILL.md +0 -417
- package/ai-config/skills/frontend/zustand-state/SKILL.md +0 -350
- package/ai-config/skills/infrastructure/chaos-engineering/SKILL.md +0 -244
- package/ai-config/skills/infrastructure/chaos-spring/SKILL.md +0 -378
- package/ai-config/skills/infrastructure/devops-infra/SKILL.md +0 -435
- package/ai-config/skills/infrastructure/docker-containers/SKILL.md +0 -420
- package/ai-config/skills/infrastructure/kubernetes/SKILL.md +0 -456
- package/ai-config/skills/infrastructure/opentelemetry/SKILL.md +0 -546
- package/ai-config/skills/infrastructure/traefik-proxy/SKILL.md +0 -474
- package/ai-config/skills/infrastructure/woodpecker-ci/SKILL.md +0 -315
- package/ai-config/skills/mobile/ionic-capacitor/SKILL.md +0 -504
- package/ai-config/skills/mobile/mobile-ionic/SKILL.md +0 -448
- package/ai-config/skills/prompt-improver/SKILL.md +0 -125
- package/ai-config/skills/quality/ghagga-review/SKILL.md +0 -216
- package/ai-config/skills/references/hooks-patterns/SKILL.md +0 -238
- package/ai-config/skills/references/mcp-servers/SKILL.md +0 -275
- package/ai-config/skills/references/plugins-reference/SKILL.md +0 -110
- package/ai-config/skills/references/skills-reference/SKILL.md +0 -420
- package/ai-config/skills/references/subagent-templates/SKILL.md +0 -193
- package/ai-config/skills/systems-iot/modbus-protocol/SKILL.md +0 -410
- package/ai-config/skills/systems-iot/mqtt-rumqttc/SKILL.md +0 -408
- package/ai-config/skills/systems-iot/rust-systems/SKILL.md +0 -386
- package/ai-config/skills/systems-iot/tokio-async/SKILL.md +0 -324
- package/ai-config/skills/testing/playwright-e2e/SKILL.md +0 -289
- package/ai-config/skills/testing/testcontainers/SKILL.md +0 -299
- package/ai-config/skills/testing/vitest-testing/SKILL.md +0 -381
- package/ai-config/skills/workflow/ci-local-guide/SKILL.md +0 -118
- package/ai-config/skills/workflow/claude-automation-recommender/SKILL.md +0 -299
- package/ai-config/skills/workflow/claude-md-improver/SKILL.md +0 -158
- package/ai-config/skills/workflow/finishing-a-development-branch/SKILL.md +0 -117
- package/ai-config/skills/workflow/git-github/SKILL.md +0 -334
- package/ai-config/skills/workflow/git-github/references/examples.md +0 -160
- package/ai-config/skills/workflow/git-workflow/SKILL.md +0 -214
- package/ai-config/skills/workflow/ide-plugins/SKILL.md +0 -277
- package/ai-config/skills/workflow/ide-plugins-intellij/SKILL.md +0 -401
- package/ai-config/skills/workflow/obsidian-brain-workflow/SKILL.md +0 -199
- package/ai-config/skills/workflow/using-git-worktrees/SKILL.md +0 -100
- package/ai-config/skills/workflow/verification-before-completion/SKILL.md +0 -73
- package/ai-config/skills/workflow/wave-workflow/SKILL.md +0 -178
- package/schemas/agent.schema.json +0 -34
- package/schemas/ai-config.schema.json +0 -28
- package/schemas/plugin.schema.json +0 -62
- 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
|