@aicgen/aicgen 1.0.0-beta.1 → 1.0.0-beta.2
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/.vs/ProjectSettings.json +2 -2
- package/.vs/VSWorkspaceState.json +15 -15
- package/.vs/aicgen.slnx/v18/DocumentLayout.json +53 -53
- package/assets/icon.svg +33 -33
- package/bun.lock +0 -43
- package/data/architecture/microservices/api-gateway.md +56 -56
- package/data/devops/observability.md +73 -73
- package/dist/index.js +9299 -9299
- package/package.json +2 -2
- package/.claude/agents/architecture-reviewer.md +0 -88
- package/.claude/agents/guideline-checker.md +0 -73
- package/.claude/agents/security-auditor.md +0 -108
- package/.claude/guidelines/api-design.md +0 -645
- package/.claude/guidelines/architecture.md +0 -2503
- package/.claude/guidelines/best-practices.md +0 -618
- package/.claude/guidelines/code-style.md +0 -304
- package/.claude/guidelines/design-patterns.md +0 -573
- package/.claude/guidelines/devops.md +0 -226
- package/.claude/guidelines/error-handling.md +0 -413
- package/.claude/guidelines/language.md +0 -782
- package/.claude/guidelines/performance.md +0 -706
- package/.claude/guidelines/security.md +0 -583
- package/.claude/guidelines/testing.md +0 -568
- package/.claude/settings.json +0 -98
- package/.claude/settings.local.json +0 -8
- package/.eslintrc.json +0 -28
- package/.github/workflows/release.yml +0 -180
- package/.github/workflows/test.yml +0 -81
- package/CONTRIBUTING.md +0 -821
- package/dist/commands/init.d.ts +0 -8
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -46
- package/dist/commands/init.js.map +0 -1
- package/dist/config/profiles.d.ts +0 -4
- package/dist/config/profiles.d.ts.map +0 -1
- package/dist/config/profiles.js +0 -30
- package/dist/config/profiles.js.map +0 -1
- package/dist/config/settings.d.ts +0 -7
- package/dist/config/settings.d.ts.map +0 -1
- package/dist/config/settings.js +0 -7
- package/dist/config/settings.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/models/guideline.d.ts +0 -15
- package/dist/models/guideline.d.ts.map +0 -1
- package/dist/models/guideline.js +0 -2
- package/dist/models/guideline.js.map +0 -1
- package/dist/models/preference.d.ts +0 -9
- package/dist/models/preference.d.ts.map +0 -1
- package/dist/models/preference.js +0 -2
- package/dist/models/preference.js.map +0 -1
- package/dist/models/profile.d.ts +0 -9
- package/dist/models/profile.d.ts.map +0 -1
- package/dist/models/profile.js +0 -2
- package/dist/models/profile.js.map +0 -1
- package/dist/models/project.d.ts +0 -13
- package/dist/models/project.d.ts.map +0 -1
- package/dist/models/project.js +0 -2
- package/dist/models/project.js.map +0 -1
- package/dist/services/ai/anthropic.d.ts +0 -7
- package/dist/services/ai/anthropic.d.ts.map +0 -1
- package/dist/services/ai/anthropic.js +0 -39
- package/dist/services/ai/anthropic.js.map +0 -1
- package/dist/services/generator.d.ts +0 -2
- package/dist/services/generator.d.ts.map +0 -1
- package/dist/services/generator.js +0 -4
- package/dist/services/generator.js.map +0 -1
- package/dist/services/learner.d.ts +0 -2
- package/dist/services/learner.d.ts.map +0 -1
- package/dist/services/learner.js +0 -4
- package/dist/services/learner.js.map +0 -1
- package/dist/services/scanner.d.ts +0 -3
- package/dist/services/scanner.d.ts.map +0 -1
- package/dist/services/scanner.js +0 -54
- package/dist/services/scanner.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -15
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -27
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/file.d.ts +0 -7
- package/dist/utils/file.d.ts.map +0 -1
- package/dist/utils/file.js +0 -32
- package/dist/utils/file.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -6
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -17
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/path.d.ts +0 -6
- package/dist/utils/path.d.ts.map +0 -1
- package/dist/utils/path.js +0 -14
- package/dist/utils/path.js.map +0 -1
- package/docs/planning/memory-lane.md +0 -83
- package/packaging/linux/aicgen.spec +0 -23
- package/packaging/linux/control +0 -9
- package/packaging/macos/scripts/postinstall +0 -12
- package/packaging/windows/setup.nsi +0 -92
- package/scripts/add-categories.ts +0 -87
- package/scripts/build-binary.ts +0 -46
- package/scripts/embed-data.ts +0 -105
- package/scripts/generate-version.ts +0 -150
- package/scripts/test-decompress.ts +0 -27
- package/scripts/test-extract.ts +0 -31
- package/src/__tests__/services/assistant-file-writer.test.ts +0 -400
- package/src/__tests__/services/guideline-loader.test.ts +0 -281
- package/src/__tests__/services/tarball-extraction.test.ts +0 -125
- package/src/commands/add-guideline.ts +0 -296
- package/src/commands/clear.ts +0 -61
- package/src/commands/guideline-selector.ts +0 -123
- package/src/commands/init.ts +0 -645
- package/src/commands/quick-add.ts +0 -586
- package/src/commands/remove-guideline.ts +0 -152
- package/src/commands/stats.ts +0 -49
- package/src/commands/update.ts +0 -240
- package/src/config.ts +0 -82
- package/src/embedded-data.ts +0 -1492
- package/src/index.ts +0 -67
- package/src/models/profile.ts +0 -24
- package/src/models/project.ts +0 -43
- package/src/services/assistant-file-writer.ts +0 -612
- package/src/services/config-generator.ts +0 -150
- package/src/services/config-manager.ts +0 -70
- package/src/services/data-source.ts +0 -248
- package/src/services/first-run-init.ts +0 -148
- package/src/services/guideline-loader.ts +0 -311
- package/src/services/hook-generator.ts +0 -178
- package/src/services/subagent-generator.ts +0 -310
- package/src/utils/banner.ts +0 -66
- package/src/utils/errors.ts +0 -27
- package/src/utils/file.ts +0 -67
- package/src/utils/formatting.ts +0 -172
- package/src/utils/logger.ts +0 -89
- package/src/utils/path.ts +0 -17
- package/src/utils/wizard-state.ts +0 -132
- package/tsconfig.json +0 -25
- /package/{CLAUDE.md → claude.md} +0 -0
package/.vs/ProjectSettings.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
{
|
|
2
|
-
"CurrentProjectSetting": null
|
|
1
|
+
{
|
|
2
|
+
"CurrentProjectSetting": null
|
|
3
3
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"ExpandedNodes": [
|
|
3
|
-
"",
|
|
4
|
-
"\\src",
|
|
5
|
-
"\\src\\config",
|
|
6
|
-
"\\src\\models",
|
|
7
|
-
"\\src\\prompts",
|
|
8
|
-
"\\src\\services",
|
|
9
|
-
"\\src\\services\\ai",
|
|
10
|
-
"\\src\\templates",
|
|
11
|
-
"\\src\\templates\\guidelines",
|
|
12
|
-
"\\src\\utils"
|
|
13
|
-
],
|
|
14
|
-
"SelectedNode": "\\src\\services\\ai\\anthropic.ts",
|
|
15
|
-
"PreviewInSolutionExplorer": false
|
|
1
|
+
{
|
|
2
|
+
"ExpandedNodes": [
|
|
3
|
+
"",
|
|
4
|
+
"\\src",
|
|
5
|
+
"\\src\\config",
|
|
6
|
+
"\\src\\models",
|
|
7
|
+
"\\src\\prompts",
|
|
8
|
+
"\\src\\services",
|
|
9
|
+
"\\src\\services\\ai",
|
|
10
|
+
"\\src\\templates",
|
|
11
|
+
"\\src\\templates\\guidelines",
|
|
12
|
+
"\\src\\utils"
|
|
13
|
+
],
|
|
14
|
+
"SelectedNode": "\\src\\services\\ai\\anthropic.ts",
|
|
15
|
+
"PreviewInSolutionExplorer": false
|
|
16
16
|
}
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
{
|
|
2
|
-
"Version": 1,
|
|
3
|
-
"WorkspaceRootPath": "F:\\aicgen\\aicgen\\",
|
|
4
|
-
"Documents": [
|
|
5
|
-
{
|
|
6
|
-
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\aicgen\\aicgen\\src\\services\\ai\\anthropic.ts||{0F2454B1-A556-402D-A7D0-1FDE7F99DEE0}",
|
|
7
|
-
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\services\\ai\\anthropic.ts||{0F2454B1-A556-402D-A7D0-1FDE7F99DEE0}"
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\aicgen\\aicgen\\src\\commands\\init.ts||{0F2454B1-A556-402D-A7D0-1FDE7F99DEE0}",
|
|
11
|
-
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\commands\\init.ts||{0F2454B1-A556-402D-A7D0-1FDE7F99DEE0}"
|
|
12
|
-
}
|
|
13
|
-
],
|
|
14
|
-
"DocumentGroupContainers": [
|
|
15
|
-
{
|
|
16
|
-
"Orientation": 0,
|
|
17
|
-
"VerticalTabListWidth": 256,
|
|
18
|
-
"DocumentGroups": [
|
|
19
|
-
{
|
|
20
|
-
"DockedWidth": 200,
|
|
21
|
-
"SelectedChildIndex": 0,
|
|
22
|
-
"Children": [
|
|
23
|
-
{
|
|
24
|
-
"$type": "Document",
|
|
25
|
-
"DocumentIndex": 0,
|
|
26
|
-
"Title": "anthropic.ts",
|
|
27
|
-
"DocumentMoniker": "F:\\aicgen\\aicgen\\src\\services\\ai\\anthropic.ts",
|
|
28
|
-
"RelativeDocumentMoniker": "src\\services\\ai\\anthropic.ts",
|
|
29
|
-
"ToolTip": "F:\\aicgen\\aicgen\\src\\services\\ai\\anthropic.ts",
|
|
30
|
-
"RelativeToolTip": "src\\services\\ai\\anthropic.ts",
|
|
31
|
-
"ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAAqAAAAAAAAAA==",
|
|
32
|
-
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003213|",
|
|
33
|
-
"WhenOpened": "2025-12-06T03:22:51.667Z",
|
|
34
|
-
"EditorCaption": ""
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"$type": "Document",
|
|
38
|
-
"DocumentIndex": 1,
|
|
39
|
-
"Title": "init.ts",
|
|
40
|
-
"DocumentMoniker": "F:\\aicgen\\aicgen\\src\\commands\\init.ts",
|
|
41
|
-
"RelativeDocumentMoniker": "src\\commands\\init.ts",
|
|
42
|
-
"ToolTip": "F:\\aicgen\\aicgen\\src\\commands\\init.ts",
|
|
43
|
-
"RelativeToolTip": "src\\commands\\init.ts",
|
|
44
|
-
"ViewState": "AgIAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
|
45
|
-
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003213|",
|
|
46
|
-
"WhenOpened": "2025-12-06T03:20:37.462Z",
|
|
47
|
-
"EditorCaption": ""
|
|
48
|
-
}
|
|
49
|
-
]
|
|
50
|
-
}
|
|
51
|
-
]
|
|
52
|
-
}
|
|
53
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"Version": 1,
|
|
3
|
+
"WorkspaceRootPath": "F:\\aicgen\\aicgen\\",
|
|
4
|
+
"Documents": [
|
|
5
|
+
{
|
|
6
|
+
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\aicgen\\aicgen\\src\\services\\ai\\anthropic.ts||{0F2454B1-A556-402D-A7D0-1FDE7F99DEE0}",
|
|
7
|
+
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\services\\ai\\anthropic.ts||{0F2454B1-A556-402D-A7D0-1FDE7F99DEE0}"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|F:\\aicgen\\aicgen\\src\\commands\\init.ts||{0F2454B1-A556-402D-A7D0-1FDE7F99DEE0}",
|
|
11
|
+
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\commands\\init.ts||{0F2454B1-A556-402D-A7D0-1FDE7F99DEE0}"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"DocumentGroupContainers": [
|
|
15
|
+
{
|
|
16
|
+
"Orientation": 0,
|
|
17
|
+
"VerticalTabListWidth": 256,
|
|
18
|
+
"DocumentGroups": [
|
|
19
|
+
{
|
|
20
|
+
"DockedWidth": 200,
|
|
21
|
+
"SelectedChildIndex": 0,
|
|
22
|
+
"Children": [
|
|
23
|
+
{
|
|
24
|
+
"$type": "Document",
|
|
25
|
+
"DocumentIndex": 0,
|
|
26
|
+
"Title": "anthropic.ts",
|
|
27
|
+
"DocumentMoniker": "F:\\aicgen\\aicgen\\src\\services\\ai\\anthropic.ts",
|
|
28
|
+
"RelativeDocumentMoniker": "src\\services\\ai\\anthropic.ts",
|
|
29
|
+
"ToolTip": "F:\\aicgen\\aicgen\\src\\services\\ai\\anthropic.ts",
|
|
30
|
+
"RelativeToolTip": "src\\services\\ai\\anthropic.ts",
|
|
31
|
+
"ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAAqAAAAAAAAAA==",
|
|
32
|
+
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003213|",
|
|
33
|
+
"WhenOpened": "2025-12-06T03:22:51.667Z",
|
|
34
|
+
"EditorCaption": ""
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"$type": "Document",
|
|
38
|
+
"DocumentIndex": 1,
|
|
39
|
+
"Title": "init.ts",
|
|
40
|
+
"DocumentMoniker": "F:\\aicgen\\aicgen\\src\\commands\\init.ts",
|
|
41
|
+
"RelativeDocumentMoniker": "src\\commands\\init.ts",
|
|
42
|
+
"ToolTip": "F:\\aicgen\\aicgen\\src\\commands\\init.ts",
|
|
43
|
+
"RelativeToolTip": "src\\commands\\init.ts",
|
|
44
|
+
"ViewState": "AgIAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
|
45
|
+
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003213|",
|
|
46
|
+
"WhenOpened": "2025-12-06T03:20:37.462Z",
|
|
47
|
+
"EditorCaption": ""
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
54
|
}
|
package/assets/icon.svg
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
<svg width="300" height="150" viewBox="0 0 300 150" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="flowGradient" x1="50" y1="75" x2="160" y2="75" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop offset="0%" stop-color="#06b6d4" /> <stop offset="100%" stop-color="#8b5cf6" /> </linearGradient>
|
|
5
|
-
<filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
|
|
6
|
-
<feGaussianBlur stdDeviation="2" result="coloredBlur"/>
|
|
7
|
-
<feMerge>
|
|
8
|
-
<feMergeNode in="coloredBlur"/>
|
|
9
|
-
<feMergeNode in="SourceGraphic"/>
|
|
10
|
-
</feMerge>
|
|
11
|
-
</filter>
|
|
12
|
-
</defs>
|
|
13
|
-
|
|
14
|
-
<rect width="700" height="150" fill="#0f172a" rx="8" />
|
|
15
|
-
|
|
16
|
-
<g transform="translate(40, 35)">
|
|
17
|
-
<rect x="160" y="0" width="60" height="80" rx="6" fill="#1e1b4b" stroke="#8b5cf6" stroke-width="2"/>
|
|
18
|
-
<path d="M200 0 L220 20 L220 6 A 6 6 0 0 0 214 0 Z" fill="#8b5cf6" opacity="0.5"/>
|
|
19
|
-
<rect x="170" y="20" width="30" height="4" rx="2" fill="#8b5cf6" opacity="0.6"/>
|
|
20
|
-
<rect x="170" y="32" width="40" height="4" rx="2" fill="#8b5cf6" opacity="0.6"/>
|
|
21
|
-
<rect x="170" y="44" width="35" height="4" rx="2" fill="#8b5cf6" opacity="0.6"/>
|
|
22
|
-
<circle cx="210" cy="70" r="3" fill="#10b981" filter="url(#glow)" />
|
|
23
|
-
|
|
24
|
-
<circle cx="20" cy="15" r="8" fill="#06b6d4" filter="url(#glow)" />
|
|
25
|
-
<circle cx="20" cy="40" r="8" fill="#06b6d4" filter="url(#glow)" />
|
|
26
|
-
<circle cx="20" cy="65" r="8" fill="#06b6d4" filter="url(#glow)" />
|
|
27
|
-
|
|
28
|
-
<path d="M28 15 C 60 15, 100 15, 160 30" stroke="url(#flowGradient)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
29
|
-
<path d="M28 40 C 60 40, 100 40, 160 40" stroke="url(#flowGradient)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
30
|
-
<path d="M28 65 C 60 65, 100 65, 160 50" stroke="url(#flowGradient)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
31
|
-
</g>
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
<svg width="300" height="150" viewBox="0 0 300 150" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="flowGradient" x1="50" y1="75" x2="160" y2="75" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0%" stop-color="#06b6d4" /> <stop offset="100%" stop-color="#8b5cf6" /> </linearGradient>
|
|
5
|
+
<filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
|
|
6
|
+
<feGaussianBlur stdDeviation="2" result="coloredBlur"/>
|
|
7
|
+
<feMerge>
|
|
8
|
+
<feMergeNode in="coloredBlur"/>
|
|
9
|
+
<feMergeNode in="SourceGraphic"/>
|
|
10
|
+
</feMerge>
|
|
11
|
+
</filter>
|
|
12
|
+
</defs>
|
|
13
|
+
|
|
14
|
+
<rect width="700" height="150" fill="#0f172a" rx="8" />
|
|
15
|
+
|
|
16
|
+
<g transform="translate(40, 35)">
|
|
17
|
+
<rect x="160" y="0" width="60" height="80" rx="6" fill="#1e1b4b" stroke="#8b5cf6" stroke-width="2"/>
|
|
18
|
+
<path d="M200 0 L220 20 L220 6 A 6 6 0 0 0 214 0 Z" fill="#8b5cf6" opacity="0.5"/>
|
|
19
|
+
<rect x="170" y="20" width="30" height="4" rx="2" fill="#8b5cf6" opacity="0.6"/>
|
|
20
|
+
<rect x="170" y="32" width="40" height="4" rx="2" fill="#8b5cf6" opacity="0.6"/>
|
|
21
|
+
<rect x="170" y="44" width="35" height="4" rx="2" fill="#8b5cf6" opacity="0.6"/>
|
|
22
|
+
<circle cx="210" cy="70" r="3" fill="#10b981" filter="url(#glow)" />
|
|
23
|
+
|
|
24
|
+
<circle cx="20" cy="15" r="8" fill="#06b6d4" filter="url(#glow)" />
|
|
25
|
+
<circle cx="20" cy="40" r="8" fill="#06b6d4" filter="url(#glow)" />
|
|
26
|
+
<circle cx="20" cy="65" r="8" fill="#06b6d4" filter="url(#glow)" />
|
|
27
|
+
|
|
28
|
+
<path d="M28 15 C 60 15, 100 15, 160 30" stroke="url(#flowGradient)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
29
|
+
<path d="M28 40 C 60 40, 100 40, 160 40" stroke="url(#flowGradient)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
30
|
+
<path d="M28 65 C 60 65, 100 65, 160 50" stroke="url(#flowGradient)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
31
|
+
</g>
|
|
32
|
+
|
|
33
|
+
|
|
34
34
|
</svg>
|
package/bun.lock
CHANGED
|
@@ -9,19 +9,14 @@
|
|
|
9
9
|
"@inquirer/prompts": "^6.0.1",
|
|
10
10
|
"chalk": "^5.3.0",
|
|
11
11
|
"commander": "^12.1.0",
|
|
12
|
-
"debug": "^4.3.7",
|
|
13
12
|
"decompress": "^4.2.1",
|
|
14
13
|
"decompress-targz": "^4.1.1",
|
|
15
|
-
"gray-matter": "^4.0.3",
|
|
16
|
-
"handlebars": "^4.7.8",
|
|
17
14
|
"ora": "^8.1.1",
|
|
18
15
|
"winston": "^3.19.0",
|
|
19
16
|
"yaml": "^2.6.1",
|
|
20
|
-
"zod": "^4.1.13",
|
|
21
17
|
},
|
|
22
18
|
"devDependencies": {
|
|
23
19
|
"@types/bun": "^1.1.13",
|
|
24
|
-
"@types/debug": "^4.1.12",
|
|
25
20
|
"@types/decompress": "^4.2.7",
|
|
26
21
|
"@types/node": "^20.17.9",
|
|
27
22
|
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
@@ -91,14 +86,10 @@
|
|
|
91
86
|
|
|
92
87
|
"@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="],
|
|
93
88
|
|
|
94
|
-
"@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="],
|
|
95
|
-
|
|
96
89
|
"@types/decompress": ["@types/decompress@4.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-9z+8yjKr5Wn73Pt17/ldnmQToaFHZxK0N1GHysuk/JIPT8RIdQeoInM01wWPgypRcvb6VH1drjuFpQ4zmY437g=="],
|
|
97
90
|
|
|
98
91
|
"@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
|
|
99
92
|
|
|
100
|
-
"@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="],
|
|
101
|
-
|
|
102
93
|
"@types/mute-stream": ["@types/mute-stream@0.0.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow=="],
|
|
103
94
|
|
|
104
95
|
"@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="],
|
|
@@ -247,8 +238,6 @@
|
|
|
247
238
|
|
|
248
239
|
"espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="],
|
|
249
240
|
|
|
250
|
-
"esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
|
|
251
|
-
|
|
252
241
|
"esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="],
|
|
253
242
|
|
|
254
243
|
"esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="],
|
|
@@ -257,8 +246,6 @@
|
|
|
257
246
|
|
|
258
247
|
"esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
|
|
259
248
|
|
|
260
|
-
"extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="],
|
|
261
|
-
|
|
262
249
|
"external-editor": ["external-editor@3.1.0", "", { "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="],
|
|
263
250
|
|
|
264
251
|
"fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
|
|
@@ -319,10 +306,6 @@
|
|
|
319
306
|
|
|
320
307
|
"graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="],
|
|
321
308
|
|
|
322
|
-
"gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="],
|
|
323
|
-
|
|
324
|
-
"handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="],
|
|
325
|
-
|
|
326
309
|
"has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
|
|
327
310
|
|
|
328
311
|
"has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="],
|
|
@@ -349,8 +332,6 @@
|
|
|
349
332
|
|
|
350
333
|
"is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="],
|
|
351
334
|
|
|
352
|
-
"is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="],
|
|
353
|
-
|
|
354
335
|
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
|
|
355
336
|
|
|
356
337
|
"is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
|
|
@@ -385,8 +366,6 @@
|
|
|
385
366
|
|
|
386
367
|
"keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="],
|
|
387
368
|
|
|
388
|
-
"kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="],
|
|
389
|
-
|
|
390
369
|
"kuler": ["kuler@2.0.0", "", {}, "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="],
|
|
391
370
|
|
|
392
371
|
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
|
|
@@ -411,16 +390,12 @@
|
|
|
411
390
|
|
|
412
391
|
"minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
|
|
413
392
|
|
|
414
|
-
"minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
|
|
415
|
-
|
|
416
393
|
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
|
417
394
|
|
|
418
395
|
"mute-stream": ["mute-stream@3.0.0", "", {}, "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw=="],
|
|
419
396
|
|
|
420
397
|
"natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
|
|
421
398
|
|
|
422
|
-
"neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="],
|
|
423
|
-
|
|
424
399
|
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
|
|
425
400
|
|
|
426
401
|
"once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
|
|
@@ -489,8 +464,6 @@
|
|
|
489
464
|
|
|
490
465
|
"safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
|
|
491
466
|
|
|
492
|
-
"section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="],
|
|
493
|
-
|
|
494
467
|
"seek-bzip": ["seek-bzip@1.0.6", "", { "dependencies": { "commander": "^2.8.1" }, "bin": { "seek-bunzip": "bin/seek-bunzip", "seek-table": "bin/seek-bzip-table" } }, "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ=="],
|
|
495
468
|
|
|
496
469
|
"semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
|
|
@@ -505,10 +478,6 @@
|
|
|
505
478
|
|
|
506
479
|
"slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="],
|
|
507
480
|
|
|
508
|
-
"source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
|
|
509
|
-
|
|
510
|
-
"sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="],
|
|
511
|
-
|
|
512
481
|
"stack-trace": ["stack-trace@0.0.10", "", {}, "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg=="],
|
|
513
482
|
|
|
514
483
|
"stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="],
|
|
@@ -519,8 +488,6 @@
|
|
|
519
488
|
|
|
520
489
|
"strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
|
521
490
|
|
|
522
|
-
"strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="],
|
|
523
|
-
|
|
524
491
|
"strip-dirs": ["strip-dirs@2.1.0", "", { "dependencies": { "is-natural-number": "^4.0.1" } }, "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g=="],
|
|
525
492
|
|
|
526
493
|
"strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
|
|
@@ -553,8 +520,6 @@
|
|
|
553
520
|
|
|
554
521
|
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
555
522
|
|
|
556
|
-
"uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="],
|
|
557
|
-
|
|
558
523
|
"unbzip2-stream": ["unbzip2-stream@1.4.3", "", { "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg=="],
|
|
559
524
|
|
|
560
525
|
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
|
@@ -573,8 +538,6 @@
|
|
|
573
538
|
|
|
574
539
|
"word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
|
|
575
540
|
|
|
576
|
-
"wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="],
|
|
577
|
-
|
|
578
541
|
"wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="],
|
|
579
542
|
|
|
580
543
|
"wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
|
|
@@ -589,8 +552,6 @@
|
|
|
589
552
|
|
|
590
553
|
"yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="],
|
|
591
554
|
|
|
592
|
-
"zod": ["zod@4.1.13", "", {}, "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig=="],
|
|
593
|
-
|
|
594
555
|
"@inquirer/confirm/@inquirer/core": ["@inquirer/core@9.2.1", "", { "dependencies": { "@inquirer/figures": "^1.0.6", "@inquirer/type": "^2.0.0", "@types/mute-stream": "^0.0.4", "@types/node": "^22.5.5", "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^1.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg=="],
|
|
595
556
|
|
|
596
557
|
"@inquirer/confirm/@inquirer/type": ["@inquirer/type@2.0.0", "", { "dependencies": { "mute-stream": "^1.0.0" } }, "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag=="],
|
|
@@ -657,8 +618,6 @@
|
|
|
657
618
|
|
|
658
619
|
"fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
|
|
659
620
|
|
|
660
|
-
"gray-matter/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="],
|
|
661
|
-
|
|
662
621
|
"log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="],
|
|
663
622
|
|
|
664
623
|
"make-dir/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="],
|
|
@@ -785,8 +744,6 @@
|
|
|
785
744
|
|
|
786
745
|
"color/color-convert/color-name": ["color-name@2.1.0", "", {}, "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg=="],
|
|
787
746
|
|
|
788
|
-
"gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
|
|
789
|
-
|
|
790
747
|
"ora/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
|
|
791
748
|
|
|
792
749
|
"string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
# API Gateway
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
An API Gateway acts as a single entry point for a group of microservices. It handles cross-cutting concerns and routes requests to the appropriate backend services.
|
|
6
|
-
|
|
7
|
-
## Core Responsibilities
|
|
8
|
-
|
|
9
|
-
1. **Routing**: Forwarding requests to the correct service (e.g., `/api/users` -> User Service).
|
|
10
|
-
2. **Authentication & Authorization**: Verifying identity and permissions at the edge.
|
|
11
|
-
3. **Rate Limiting**: Protecting services from abuse.
|
|
12
|
-
4. **Protocol Translation**: Converting public HTTP/REST to internal gRPC or AMQP.
|
|
13
|
-
5. **Response Aggregation**: Combining data from multiple services into a single response.
|
|
14
|
-
|
|
15
|
-
## Patterns
|
|
16
|
-
|
|
17
|
-
### Backend for Frontend (BFF)
|
|
18
|
-
|
|
19
|
-
Create separate gateways for different client types (Mobile, Web, 3rd Party) to optimize the API for each consumer.
|
|
20
|
-
|
|
21
|
-
```mermaid
|
|
22
|
-
graph TD
|
|
23
|
-
Web[Web App] --> WebBFF[Web BFF]
|
|
24
|
-
Mobile[Mobile App] --> MobileBFF[Mobile BFF]
|
|
25
|
-
|
|
26
|
-
WebBFF --> SvcA[Service A]
|
|
27
|
-
WebBFF --> SvcB[Service B]
|
|
28
|
-
|
|
29
|
-
MobileBFF --> SvcA
|
|
30
|
-
MobileBFF --> SvcC[Service C]
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Implementation
|
|
34
|
-
|
|
35
|
-
### Cross-Cutting Concerns
|
|
36
|
-
|
|
37
|
-
Handle these at the gateway to keep microservices focused on business logic:
|
|
38
|
-
|
|
39
|
-
- **SSL Termination**: Decrypt HTTPS at the gateway.
|
|
40
|
-
- **CORS**: Handle Cross-Origin Resource Sharing headers.
|
|
41
|
-
- **Request Validation**: Basic schema validation before hitting services.
|
|
42
|
-
- **Caching**: Cache common responses.
|
|
43
|
-
|
|
44
|
-
### When to Use
|
|
45
|
-
|
|
46
|
-
| Use API Gateway When... | Avoid API Gateway When... |
|
|
47
|
-
|-------------------------|---------------------------|
|
|
48
|
-
| You have multiple microservices | You have a monolithic application |
|
|
49
|
-
| You need centralized auth/security | You need ultra-low latency (extra hop) |
|
|
50
|
-
| You have diverse clients (Web, Mobile) | Your architecture is very simple |
|
|
51
|
-
|
|
52
|
-
## Best Practices
|
|
53
|
-
|
|
54
|
-
- **Keep it Logic-Free**: Don't put business logic in the gateway. It should be a router, not a processor.
|
|
55
|
-
- **High Availability**: The gateway is a single point of failure; deploy it in a cluster.
|
|
56
|
-
- **Observability**: Ensure the gateway generates trace IDs and logs all traffic.
|
|
1
|
+
# API Gateway
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
An API Gateway acts as a single entry point for a group of microservices. It handles cross-cutting concerns and routes requests to the appropriate backend services.
|
|
6
|
+
|
|
7
|
+
## Core Responsibilities
|
|
8
|
+
|
|
9
|
+
1. **Routing**: Forwarding requests to the correct service (e.g., `/api/users` -> User Service).
|
|
10
|
+
2. **Authentication & Authorization**: Verifying identity and permissions at the edge.
|
|
11
|
+
3. **Rate Limiting**: Protecting services from abuse.
|
|
12
|
+
4. **Protocol Translation**: Converting public HTTP/REST to internal gRPC or AMQP.
|
|
13
|
+
5. **Response Aggregation**: Combining data from multiple services into a single response.
|
|
14
|
+
|
|
15
|
+
## Patterns
|
|
16
|
+
|
|
17
|
+
### Backend for Frontend (BFF)
|
|
18
|
+
|
|
19
|
+
Create separate gateways for different client types (Mobile, Web, 3rd Party) to optimize the API for each consumer.
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
graph TD
|
|
23
|
+
Web[Web App] --> WebBFF[Web BFF]
|
|
24
|
+
Mobile[Mobile App] --> MobileBFF[Mobile BFF]
|
|
25
|
+
|
|
26
|
+
WebBFF --> SvcA[Service A]
|
|
27
|
+
WebBFF --> SvcB[Service B]
|
|
28
|
+
|
|
29
|
+
MobileBFF --> SvcA
|
|
30
|
+
MobileBFF --> SvcC[Service C]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Implementation
|
|
34
|
+
|
|
35
|
+
### Cross-Cutting Concerns
|
|
36
|
+
|
|
37
|
+
Handle these at the gateway to keep microservices focused on business logic:
|
|
38
|
+
|
|
39
|
+
- **SSL Termination**: Decrypt HTTPS at the gateway.
|
|
40
|
+
- **CORS**: Handle Cross-Origin Resource Sharing headers.
|
|
41
|
+
- **Request Validation**: Basic schema validation before hitting services.
|
|
42
|
+
- **Caching**: Cache common responses.
|
|
43
|
+
|
|
44
|
+
### When to Use
|
|
45
|
+
|
|
46
|
+
| Use API Gateway When... | Avoid API Gateway When... |
|
|
47
|
+
|-------------------------|---------------------------|
|
|
48
|
+
| You have multiple microservices | You have a monolithic application |
|
|
49
|
+
| You need centralized auth/security | You need ultra-low latency (extra hop) |
|
|
50
|
+
| You have diverse clients (Web, Mobile) | Your architecture is very simple |
|
|
51
|
+
|
|
52
|
+
## Best Practices
|
|
53
|
+
|
|
54
|
+
- **Keep it Logic-Free**: Don't put business logic in the gateway. It should be a router, not a processor.
|
|
55
|
+
- **High Availability**: The gateway is a single point of failure; deploy it in a cluster.
|
|
56
|
+
- **Observability**: Ensure the gateway generates trace IDs and logs all traffic.
|