frontend-guardian-core 2.6.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/LICENSE +21 -0
- package/bin/fg-core.js +1238 -0
- package/bin/watch-mode.js +123 -0
- package/dist/engine/cache.d.ts +68 -0
- package/dist/engine/cache.d.ts.map +1 -0
- package/dist/engine/cache.js +164 -0
- package/dist/engine/cache.js.map +1 -0
- package/dist/engine/rule-engine.d.ts +135 -0
- package/dist/engine/rule-engine.d.ts.map +1 -0
- package/dist/engine/rule-engine.js +716 -0
- package/dist/engine/rule-engine.js.map +1 -0
- package/dist/formatters/github-annotation.d.ts +36 -0
- package/dist/formatters/github-annotation.d.ts.map +1 -0
- package/dist/formatters/github-annotation.js +122 -0
- package/dist/formatters/github-annotation.js.map +1 -0
- package/dist/formatters/pr-comment.d.ts +43 -0
- package/dist/formatters/pr-comment.d.ts.map +1 -0
- package/dist/formatters/pr-comment.js +171 -0
- package/dist/formatters/pr-comment.js.map +1 -0
- package/dist/formatters/sarif.d.ts +104 -0
- package/dist/formatters/sarif.d.ts.map +1 -0
- package/dist/formatters/sarif.js +130 -0
- package/dist/formatters/sarif.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/base.d.ts +44 -0
- package/dist/integrations/base.d.ts.map +1 -0
- package/dist/integrations/base.js +104 -0
- package/dist/integrations/base.js.map +1 -0
- package/dist/integrations/eslint.d.ts +8 -0
- package/dist/integrations/eslint.d.ts.map +1 -0
- package/dist/integrations/eslint.js +67 -0
- package/dist/integrations/eslint.js.map +1 -0
- package/dist/integrations/formatter.d.ts +35 -0
- package/dist/integrations/formatter.d.ts.map +1 -0
- package/dist/integrations/formatter.js +182 -0
- package/dist/integrations/formatter.js.map +1 -0
- package/dist/integrations/index.d.ts +17 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +25 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/stylelint.d.ts +8 -0
- package/dist/integrations/stylelint.d.ts.map +1 -0
- package/dist/integrations/stylelint.js +59 -0
- package/dist/integrations/stylelint.js.map +1 -0
- package/dist/integrations/typescript.d.ts +8 -0
- package/dist/integrations/typescript.d.ts.map +1 -0
- package/dist/integrations/typescript.js +92 -0
- package/dist/integrations/typescript.js.map +1 -0
- package/dist/rules/registry.d.ts +83 -0
- package/dist/rules/registry.d.ts.map +1 -0
- package/dist/rules/registry.js +205 -0
- package/dist/rules/registry.js.map +1 -0
- package/dist/scanners/a11y-scanner.d.ts +14 -0
- package/dist/scanners/a11y-scanner.d.ts.map +1 -0
- package/dist/scanners/a11y-scanner.js +781 -0
- package/dist/scanners/a11y-scanner.js.map +1 -0
- package/dist/scanners/component-scanner.d.ts +12 -0
- package/dist/scanners/component-scanner.d.ts.map +1 -0
- package/dist/scanners/component-scanner.js +304 -0
- package/dist/scanners/component-scanner.js.map +1 -0
- package/dist/scanners/cross-file-scanner.d.ts +18 -0
- package/dist/scanners/cross-file-scanner.d.ts.map +1 -0
- package/dist/scanners/cross-file-scanner.js +684 -0
- package/dist/scanners/cross-file-scanner.js.map +1 -0
- package/dist/scanners/hooks-scanner.d.ts +15 -0
- package/dist/scanners/hooks-scanner.d.ts.map +1 -0
- package/dist/scanners/hooks-scanner.js +670 -0
- package/dist/scanners/hooks-scanner.js.map +1 -0
- package/dist/scanners/i18n-scanner.d.ts +13 -0
- package/dist/scanners/i18n-scanner.d.ts.map +1 -0
- package/dist/scanners/i18n-scanner.js +535 -0
- package/dist/scanners/i18n-scanner.js.map +1 -0
- package/dist/scanners/naming-scanner.d.ts +19 -0
- package/dist/scanners/naming-scanner.d.ts.map +1 -0
- package/dist/scanners/naming-scanner.js +746 -0
- package/dist/scanners/naming-scanner.js.map +1 -0
- package/dist/scanners/performance-scanner.d.ts +7 -0
- package/dist/scanners/performance-scanner.d.ts.map +1 -0
- package/dist/scanners/performance-scanner.js +402 -0
- package/dist/scanners/performance-scanner.js.map +1 -0
- package/dist/scanners/platform-scanner.d.ts +15 -0
- package/dist/scanners/platform-scanner.d.ts.map +1 -0
- package/dist/scanners/platform-scanner.js +320 -0
- package/dist/scanners/platform-scanner.js.map +1 -0
- package/dist/scanners/security-scanner.d.ts +7 -0
- package/dist/scanners/security-scanner.d.ts.map +1 -0
- package/dist/scanners/security-scanner.js +349 -0
- package/dist/scanners/security-scanner.js.map +1 -0
- package/dist/scanners/svelte-scanner.d.ts +14 -0
- package/dist/scanners/svelte-scanner.d.ts.map +1 -0
- package/dist/scanners/svelte-scanner.js +228 -0
- package/dist/scanners/svelte-scanner.js.map +1 -0
- package/dist/types.d.ts +343 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/ast-parser.d.ts +21 -0
- package/dist/utils/ast-parser.d.ts.map +1 -0
- package/dist/utils/ast-parser.js +119 -0
- package/dist/utils/ast-parser.js.map +1 -0
- package/dist/utils/baseline.d.ts +89 -0
- package/dist/utils/baseline.d.ts.map +1 -0
- package/dist/utils/baseline.js +156 -0
- package/dist/utils/baseline.js.map +1 -0
- package/dist/utils/ci-generator.d.ts +34 -0
- package/dist/utils/ci-generator.d.ts.map +1 -0
- package/dist/utils/ci-generator.js +194 -0
- package/dist/utils/ci-generator.js.map +1 -0
- package/dist/utils/common.d.ts +8 -0
- package/dist/utils/common.d.ts.map +1 -0
- package/dist/utils/common.js +38 -0
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/concurrent.d.ts +16 -0
- package/dist/utils/concurrent.d.ts.map +1 -0
- package/dist/utils/concurrent.js +49 -0
- package/dist/utils/concurrent.js.map +1 -0
- package/dist/utils/config-loader.d.ts +8 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +154 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/fix-bot.d.ts +36 -0
- package/dist/utils/fix-bot.d.ts.map +1 -0
- package/dist/utils/fix-bot.js +274 -0
- package/dist/utils/fix-bot.js.map +1 -0
- package/dist/utils/git-hooks.d.ts +55 -0
- package/dist/utils/git-hooks.d.ts.map +1 -0
- package/dist/utils/git-hooks.js +318 -0
- package/dist/utils/git-hooks.js.map +1 -0
- package/dist/utils/history-report.d.ts +72 -0
- package/dist/utils/history-report.d.ts.map +1 -0
- package/dist/utils/history-report.js +144 -0
- package/dist/utils/history-report.js.map +1 -0
- package/dist/utils/init-config.d.ts +23 -0
- package/dist/utils/init-config.d.ts.map +1 -0
- package/dist/utils/init-config.js +146 -0
- package/dist/utils/init-config.js.map +1 -0
- package/dist/utils/pr-publisher.d.ts +64 -0
- package/dist/utils/pr-publisher.d.ts.map +1 -0
- package/dist/utils/pr-publisher.js +265 -0
- package/dist/utils/pr-publisher.js.map +1 -0
- package/dist/utils/project-detector.d.ts +20 -0
- package/dist/utils/project-detector.d.ts.map +1 -0
- package/dist/utils/project-detector.js +342 -0
- package/dist/utils/project-detector.js.map +1 -0
- package/dist/utils/report-uploader.d.ts +35 -0
- package/dist/utils/report-uploader.d.ts.map +1 -0
- package/dist/utils/report-uploader.js +106 -0
- package/dist/utils/report-uploader.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 项目元数据检测工具 (Phase 2: 智能化深度检测)
|
|
4
|
+
*
|
|
5
|
+
* 检测维度:
|
|
6
|
+
* 1. 框架 & 版本 (react@18.2, vue@3.3, nextjs, nuxt...)
|
|
7
|
+
* 2. 组件库 & 版本 (antd@5, element-plus, mui...)
|
|
8
|
+
* 3. 构建工具 / Bundler (vite, webpack, rsbuild, turbopack...)
|
|
9
|
+
* 4. 测试框架 (jest, vitest, cypress, playwright...)
|
|
10
|
+
* 5. 状态管理 (redux, zustand, pinia, jotai...)
|
|
11
|
+
* 6. 样式方案 (tailwind, styled-components, sass, less...)
|
|
12
|
+
* 7. 路由 (react-router, vue-router, tanstack-router...)
|
|
13
|
+
* 8. 包管理器 (npm/yarn/pnpm/bun — 通过 lockfile 推断)
|
|
14
|
+
* 9. Linter / Formatter (eslint, biome, prettier, stylelint...)
|
|
15
|
+
* 10. Monorepo 工具 (nx, turborepo, lerna, pnpm-workspace)
|
|
16
|
+
* 11. 平台 (pc, h5, 小程序, app, harmony...)
|
|
17
|
+
* 12. i18n (react-intl, vue-i18n, i18next...)
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.detectProjectMeta = detectProjectMeta;
|
|
21
|
+
const node_fs_1 = require("node:fs");
|
|
22
|
+
const node_path_1 = require("node:path");
|
|
23
|
+
function detectProjectMeta(projectDir, config) {
|
|
24
|
+
const pkgPath = (0, node_path_1.resolve)(projectDir, "package.json");
|
|
25
|
+
const pkg = (0, node_fs_1.existsSync)(pkgPath) ? JSON.parse((0, node_fs_1.readFileSync)(pkgPath, "utf-8")) : {};
|
|
26
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
27
|
+
const scripts = pkg.scripts || {};
|
|
28
|
+
const frameworkInfo = detectFramework(projectDir, deps);
|
|
29
|
+
const componentLibInfo = detectComponentLib(deps);
|
|
30
|
+
const platforms = detectPlatforms(projectDir, frameworkInfo.framework, deps);
|
|
31
|
+
const i18nInfo = detectI18n(deps);
|
|
32
|
+
return {
|
|
33
|
+
framework: frameworkInfo.framework,
|
|
34
|
+
frameworkVersion: frameworkInfo.version,
|
|
35
|
+
componentLib: componentLibInfo.componentLib,
|
|
36
|
+
componentLibVersion: componentLibInfo.version,
|
|
37
|
+
platforms,
|
|
38
|
+
hasTypeScript: (0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "tsconfig.json")) || deps["typescript"] !== undefined,
|
|
39
|
+
hasI18n: i18nInfo.hasI18n,
|
|
40
|
+
i18nLib: i18nInfo.i18nLib,
|
|
41
|
+
scripts,
|
|
42
|
+
// Phase 2: 深度检测
|
|
43
|
+
bundler: detectBundler(deps)?.bundler,
|
|
44
|
+
bundlerVersion: detectBundler(deps)?.version,
|
|
45
|
+
testFramework: detectTestFramework(deps)?.testFramework,
|
|
46
|
+
testFrameworkVersion: detectTestFramework(deps)?.version,
|
|
47
|
+
stateManager: detectStateManager(deps)?.stateManager,
|
|
48
|
+
stateManagerVersion: detectStateManager(deps)?.version,
|
|
49
|
+
styling: detectStyling(deps)?.styling,
|
|
50
|
+
stylingVersion: detectStyling(deps)?.version,
|
|
51
|
+
router: detectRouter(deps)?.router,
|
|
52
|
+
routerVersion: detectRouter(deps)?.version,
|
|
53
|
+
packageManager: detectPackageManager(projectDir),
|
|
54
|
+
linter: detectLinter(deps),
|
|
55
|
+
monorepoTool: detectMonorepo(projectDir, deps),
|
|
56
|
+
runtime: detectRuntime(projectDir, pkg),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
60
|
+
// 框架检测
|
|
61
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
62
|
+
function detectFramework(projectDir, deps) {
|
|
63
|
+
const fwOrder = [
|
|
64
|
+
{ key: "next", framework: "nextjs" },
|
|
65
|
+
{ key: "nuxt", framework: "nuxt" },
|
|
66
|
+
{ key: "@dcloudio/uni-app", framework: "uniapp" },
|
|
67
|
+
{ key: "@tarojs/taro", framework: "taro" },
|
|
68
|
+
{ key: "react-native", framework: "react-native" },
|
|
69
|
+
{ key: "flutter", framework: "flutter" },
|
|
70
|
+
{ key: "react", framework: "react" },
|
|
71
|
+
{ key: "vue", framework: "vue" },
|
|
72
|
+
{ key: "svelte", framework: "svelte" },
|
|
73
|
+
{ key: "solid-js", framework: "solidjs" },
|
|
74
|
+
{ key: "astro", framework: "astro" },
|
|
75
|
+
];
|
|
76
|
+
for (const { key, framework } of fwOrder) {
|
|
77
|
+
if (deps[key]) {
|
|
78
|
+
return { framework, version: deps[key] };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// HarmonyOS (no typical npm dep, detect by file structure)
|
|
82
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "entry/src/main/ets")) || deps["@ohos/hvigor"]) {
|
|
83
|
+
return { framework: "harmony" };
|
|
84
|
+
}
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
88
|
+
// 组件库检测
|
|
89
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
90
|
+
function detectComponentLib(deps) {
|
|
91
|
+
const libMap = [
|
|
92
|
+
{ key: "antd", lib: "antd" },
|
|
93
|
+
{ key: "ant-design-vue", lib: "antd" },
|
|
94
|
+
{ key: "@ant-design/react-native", lib: "antd" },
|
|
95
|
+
{ key: "element-plus", lib: "element-plus" },
|
|
96
|
+
{ key: "@mui/material", lib: "mui" },
|
|
97
|
+
{ key: "vuetify", lib: "vuetify" },
|
|
98
|
+
{ key: "@nutui/nutui-react", lib: "nutui" },
|
|
99
|
+
{ key: "@nutui/nutui", lib: "nutui" },
|
|
100
|
+
{ key: "tdesign-react", lib: "tdesign" },
|
|
101
|
+
{ key: "tdesign-vue-next", lib: "tdesign" },
|
|
102
|
+
];
|
|
103
|
+
for (const { key, lib } of libMap) {
|
|
104
|
+
if (deps[key]) {
|
|
105
|
+
return { componentLib: lib, version: deps[key] };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {};
|
|
109
|
+
}
|
|
110
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
111
|
+
// 平台检测
|
|
112
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
113
|
+
function detectPlatforms(projectDir, framework, deps) {
|
|
114
|
+
const platforms = [];
|
|
115
|
+
// 小程序
|
|
116
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "manifest.json")) && (0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "pages.json"))) {
|
|
117
|
+
platforms.push("wechat-mp", "h5", "app");
|
|
118
|
+
return platforms;
|
|
119
|
+
}
|
|
120
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "app.json")) && (0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "project.config.json"))) {
|
|
121
|
+
platforms.push("wechat-mp");
|
|
122
|
+
return platforms;
|
|
123
|
+
}
|
|
124
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "mini.project.json"))) {
|
|
125
|
+
platforms.push("alipay-mp");
|
|
126
|
+
return platforms;
|
|
127
|
+
}
|
|
128
|
+
// 多端框架
|
|
129
|
+
if (framework === "uniapp") {
|
|
130
|
+
platforms.push("wechat-mp", "h5", "app");
|
|
131
|
+
return platforms;
|
|
132
|
+
}
|
|
133
|
+
if (framework === "taro") {
|
|
134
|
+
platforms.push("wechat-mp", "h5");
|
|
135
|
+
return platforms;
|
|
136
|
+
}
|
|
137
|
+
// PC / H5
|
|
138
|
+
if (framework === "react" || framework === "vue" || framework === "nextjs" || framework === "nuxt") {
|
|
139
|
+
platforms.push("pc", "h5");
|
|
140
|
+
}
|
|
141
|
+
// App
|
|
142
|
+
if (framework === "flutter" || framework === "react-native") {
|
|
143
|
+
platforms.push("app");
|
|
144
|
+
}
|
|
145
|
+
// HarmonyOS
|
|
146
|
+
if (framework === "harmony") {
|
|
147
|
+
platforms.push("harmony");
|
|
148
|
+
}
|
|
149
|
+
return platforms.length > 0 ? platforms : ["pc"];
|
|
150
|
+
}
|
|
151
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
152
|
+
// i18n 检测
|
|
153
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
154
|
+
function detectI18n(deps) {
|
|
155
|
+
const i18nDeps = ["react-intl", "react-i18next", "vue-i18n", "i18next", "@dcloudio/uni-i18n", "@formatjs/intl"];
|
|
156
|
+
const found = i18nDeps.find((d) => deps[d]);
|
|
157
|
+
return { hasI18n: !!found, i18nLib: found };
|
|
158
|
+
}
|
|
159
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
160
|
+
// Bundler / Build Tool 检测
|
|
161
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
162
|
+
function detectBundler(deps) {
|
|
163
|
+
const bundlerMap = [
|
|
164
|
+
{ key: "vite", bundler: "vite" },
|
|
165
|
+
{ key: "@rsbuild/core", bundler: "rsbuild" },
|
|
166
|
+
{ key: "webpack", bundler: "webpack" },
|
|
167
|
+
{ key: "@farmfe/core", bundler: "farm" },
|
|
168
|
+
{ key: "@rspack/core", bundler: "rspack" },
|
|
169
|
+
{ key: "parcel", bundler: "parcel" },
|
|
170
|
+
{ key: "esbuild", bundler: "esbuild" },
|
|
171
|
+
{ key: "rollup", bundler: "rollup" },
|
|
172
|
+
{ key: "wmr", bundler: "wmr" },
|
|
173
|
+
];
|
|
174
|
+
// Next.js / Nuxt 自带 bundler
|
|
175
|
+
if (deps["next"]) {
|
|
176
|
+
return { bundler: "turbopack", version: deps["next"] };
|
|
177
|
+
}
|
|
178
|
+
if (deps["nuxt"]) {
|
|
179
|
+
return { bundler: "vite", version: deps["nuxt"] };
|
|
180
|
+
}
|
|
181
|
+
for (const { key, bundler } of bundlerMap) {
|
|
182
|
+
if (deps[key]) {
|
|
183
|
+
return { bundler, version: deps[key] };
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
189
|
+
// 测试框架检测
|
|
190
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
191
|
+
function detectTestFramework(deps) {
|
|
192
|
+
const testMap = [
|
|
193
|
+
{ key: "vitest", tf: "vitest" },
|
|
194
|
+
{ key: "jest", tf: "jest" },
|
|
195
|
+
{ key: "playwright", tf: "playwright" },
|
|
196
|
+
{ key: "cypress", tf: "cypress" },
|
|
197
|
+
{ key: "mocha", tf: "mocha" },
|
|
198
|
+
{ key: "karma", tf: "karma" },
|
|
199
|
+
{ key: "ava", tf: "ava" },
|
|
200
|
+
];
|
|
201
|
+
for (const { key, tf } of testMap) {
|
|
202
|
+
if (deps[key]) {
|
|
203
|
+
return { testFramework: tf, version: deps[key] };
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
209
|
+
// 状态管理检测
|
|
210
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
211
|
+
function detectStateManager(deps) {
|
|
212
|
+
const smMap = [
|
|
213
|
+
{ key: "zustand", sm: "zustand" },
|
|
214
|
+
{ key: "jotai", sm: "jotai" },
|
|
215
|
+
{ key: "recoil", sm: "recoil" },
|
|
216
|
+
{ key: "valtio", sm: "valtio" },
|
|
217
|
+
{ key: "mobx", sm: "mobx" },
|
|
218
|
+
{ key: "redux", sm: "redux" },
|
|
219
|
+
{ key: "pinia", sm: "pinia" },
|
|
220
|
+
{ key: "vuex", sm: "vuex" },
|
|
221
|
+
];
|
|
222
|
+
for (const { key, sm } of smMap) {
|
|
223
|
+
if (deps[key]) {
|
|
224
|
+
return { stateManager: sm, version: deps[key] };
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
230
|
+
// 样式方案检测
|
|
231
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
232
|
+
function detectStyling(deps) {
|
|
233
|
+
const styleMap = [
|
|
234
|
+
{ key: "tailwindcss", style: "tailwindcss" },
|
|
235
|
+
{ key: "styled-components", style: "styled-components" },
|
|
236
|
+
{ key: "@emotion/react", style: "emotion" },
|
|
237
|
+
{ key: "@emotion/styled", style: "emotion" },
|
|
238
|
+
{ key: "sass", style: "sass" },
|
|
239
|
+
{ key: "less", style: "less" },
|
|
240
|
+
{ key: "postcss-modules", style: "css-modules" },
|
|
241
|
+
{ key: "@vanilla-extract/css", style: "vanilla-extract" },
|
|
242
|
+
{ key: "unocss", style: "unocss" },
|
|
243
|
+
{ key: "windicss", style: "windicss" },
|
|
244
|
+
];
|
|
245
|
+
for (const { key, style } of styleMap) {
|
|
246
|
+
if (deps[key]) {
|
|
247
|
+
return { styling: style, version: deps[key] };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
253
|
+
// 路由检测
|
|
254
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
255
|
+
function detectRouter(deps) {
|
|
256
|
+
const routerMap = [
|
|
257
|
+
{ key: "react-router-dom", router: "react-router" },
|
|
258
|
+
{ key: "react-router", router: "react-router" },
|
|
259
|
+
{ key: "vue-router", router: "vue-router" },
|
|
260
|
+
{ key: "@tanstack/react-router", router: "tanstack-router" },
|
|
261
|
+
{ key: "wouter", router: "wouter" },
|
|
262
|
+
];
|
|
263
|
+
for (const { key, router } of routerMap) {
|
|
264
|
+
if (deps[key]) {
|
|
265
|
+
return { router, version: deps[key] };
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return undefined;
|
|
269
|
+
}
|
|
270
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
271
|
+
// 包管理器检测 (通过 lockfile)
|
|
272
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
273
|
+
function detectPackageManager(projectDir) {
|
|
274
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "bun.lockb")) || (0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "bun.lock"))) {
|
|
275
|
+
return "bun";
|
|
276
|
+
}
|
|
277
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "pnpm-lock.yaml"))) {
|
|
278
|
+
return "pnpm";
|
|
279
|
+
}
|
|
280
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "yarn.lock"))) {
|
|
281
|
+
return "yarn";
|
|
282
|
+
}
|
|
283
|
+
return "npm";
|
|
284
|
+
}
|
|
285
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
286
|
+
// Linter / Formatter 检测
|
|
287
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
288
|
+
function detectLinter(deps) {
|
|
289
|
+
const linterMap = [
|
|
290
|
+
{ key: "eslint", linter: "eslint" },
|
|
291
|
+
{ key: "@biomejs/biome", linter: "biome" },
|
|
292
|
+
{ key: "oxlint", linter: "oxlint" },
|
|
293
|
+
{ key: "prettier", linter: "prettier" },
|
|
294
|
+
{ key: "stylelint", linter: "stylelint" },
|
|
295
|
+
];
|
|
296
|
+
for (const { key, linter } of linterMap) {
|
|
297
|
+
if (deps[key]) {
|
|
298
|
+
return linter;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
303
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
304
|
+
// Monorepo 工具检测
|
|
305
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
306
|
+
function detectMonorepo(projectDir, deps) {
|
|
307
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "pnpm-workspace.yaml"))) {
|
|
308
|
+
return "pnpm-workspace";
|
|
309
|
+
}
|
|
310
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "nx.json"))) {
|
|
311
|
+
return "nx";
|
|
312
|
+
}
|
|
313
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "turbo.json"))) {
|
|
314
|
+
return "turborepo";
|
|
315
|
+
}
|
|
316
|
+
if (deps["lerna"]) {
|
|
317
|
+
return "lerna";
|
|
318
|
+
}
|
|
319
|
+
if (deps["@rushstack/rush-sdk"]) {
|
|
320
|
+
return "rush";
|
|
321
|
+
}
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
325
|
+
// Runtime 检测
|
|
326
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
327
|
+
function detectRuntime(projectDir, pkg) {
|
|
328
|
+
const engines = pkg.engines || {};
|
|
329
|
+
if (pkg.packageManager) {
|
|
330
|
+
const pm = String(pkg.packageManager);
|
|
331
|
+
if (pm.startsWith("bun@"))
|
|
332
|
+
return "bun";
|
|
333
|
+
}
|
|
334
|
+
if (engines.bun)
|
|
335
|
+
return "bun";
|
|
336
|
+
// Deno projects often use deno.json
|
|
337
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "deno.json")) || (0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, "deno.jsonc"))) {
|
|
338
|
+
return "deno";
|
|
339
|
+
}
|
|
340
|
+
return "node";
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=project-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-detector.js","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 报告上传工具
|
|
3
|
+
* 支持 HTTP webhook 和文件复制两种方式
|
|
4
|
+
*/
|
|
5
|
+
/** 上传配置 */
|
|
6
|
+
export interface UploadConfig {
|
|
7
|
+
/** 上传方式 */
|
|
8
|
+
provider: "http" | "file";
|
|
9
|
+
/** HTTP webhook URL(provider=http) */
|
|
10
|
+
url?: string;
|
|
11
|
+
/** 额外请求头(provider=http) */
|
|
12
|
+
headers?: Record<string, string>;
|
|
13
|
+
/** 目标目录(provider=file) */
|
|
14
|
+
dir?: string;
|
|
15
|
+
/** 报告访问基础 URL(用于生成可访问链接) */
|
|
16
|
+
baseUrl?: string;
|
|
17
|
+
}
|
|
18
|
+
/** 上传结果 */
|
|
19
|
+
export interface UploadResult {
|
|
20
|
+
/** 是否成功 */
|
|
21
|
+
success: boolean;
|
|
22
|
+
/** 报告访问 URL */
|
|
23
|
+
reportUrl?: string;
|
|
24
|
+
/** 错误信息 */
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 从环境变量自动检测上传配置
|
|
29
|
+
*/
|
|
30
|
+
export declare function detectUploadConfig(): UploadConfig | null;
|
|
31
|
+
/**
|
|
32
|
+
* 上传报告文件
|
|
33
|
+
*/
|
|
34
|
+
export declare function uploadReport(reportPath: string, config: UploadConfig): Promise<UploadResult>;
|
|
35
|
+
//# sourceMappingURL=report-uploader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-uploader.d.ts","sourceRoot":"","sources":["../../src/utils/report-uploader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,WAAW;AACX,MAAM,WAAW,YAAY;IACzB,WAAW;IACX,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,WAAW;AACX,MAAM,WAAW,YAAY;IACzB,WAAW;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,IAAI,CAwBxD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAQlG"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 报告上传工具
|
|
4
|
+
* 支持 HTTP webhook 和文件复制两种方式
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.detectUploadConfig = detectUploadConfig;
|
|
8
|
+
exports.uploadReport = uploadReport;
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const node_path_1 = require("node:path");
|
|
11
|
+
/**
|
|
12
|
+
* 从环境变量自动检测上传配置
|
|
13
|
+
*/
|
|
14
|
+
function detectUploadConfig() {
|
|
15
|
+
const provider = process.env.FG_UPLOAD_PROVIDER;
|
|
16
|
+
if (provider === "http") {
|
|
17
|
+
const url = process.env.FG_UPLOAD_URL;
|
|
18
|
+
if (!url)
|
|
19
|
+
return null;
|
|
20
|
+
return {
|
|
21
|
+
provider: "http",
|
|
22
|
+
url,
|
|
23
|
+
baseUrl: process.env.FG_UPLOAD_BASE_URL,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (provider === "file") {
|
|
27
|
+
const dir = process.env.FG_UPLOAD_DIR;
|
|
28
|
+
if (!dir)
|
|
29
|
+
return null;
|
|
30
|
+
return {
|
|
31
|
+
provider: "file",
|
|
32
|
+
dir,
|
|
33
|
+
baseUrl: process.env.FG_UPLOAD_BASE_URL,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 上传报告文件
|
|
40
|
+
*/
|
|
41
|
+
async function uploadReport(reportPath, config) {
|
|
42
|
+
if (config.provider === "http") {
|
|
43
|
+
return uploadViaHttp(reportPath, config);
|
|
44
|
+
}
|
|
45
|
+
if (config.provider === "file") {
|
|
46
|
+
return uploadViaFile(reportPath, config);
|
|
47
|
+
}
|
|
48
|
+
return { success: false, error: `Unknown upload provider: ${config.provider}` };
|
|
49
|
+
}
|
|
50
|
+
/** 通过 HTTP POST 上传 */
|
|
51
|
+
async function uploadViaHttp(reportPath, config) {
|
|
52
|
+
try {
|
|
53
|
+
const content = (0, node_fs_1.readFileSync)(reportPath, "utf-8");
|
|
54
|
+
const filename = (0, node_path_1.basename)(reportPath);
|
|
55
|
+
const response = await fetch(config.url, {
|
|
56
|
+
method: "POST",
|
|
57
|
+
headers: {
|
|
58
|
+
"Content-Type": "application/json",
|
|
59
|
+
...config.headers,
|
|
60
|
+
},
|
|
61
|
+
body: JSON.stringify({
|
|
62
|
+
filename,
|
|
63
|
+
content,
|
|
64
|
+
timestamp: new Date().toISOString(),
|
|
65
|
+
}),
|
|
66
|
+
});
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
const errText = await response.text().catch(() => "Unknown error");
|
|
69
|
+
return { success: false, error: `HTTP ${response.status}: ${errText}` };
|
|
70
|
+
}
|
|
71
|
+
// 尝试从响应中提取 URL
|
|
72
|
+
let reportUrl;
|
|
73
|
+
try {
|
|
74
|
+
const data = await response.json();
|
|
75
|
+
reportUrl = data.url || data.reportUrl;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// 响应不是 JSON,忽略
|
|
79
|
+
}
|
|
80
|
+
return { success: true, reportUrl };
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return { success: false, error: String(err) };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** 通过文件复制上传 */
|
|
87
|
+
function uploadViaFile(reportPath, config) {
|
|
88
|
+
try {
|
|
89
|
+
const dir = config.dir;
|
|
90
|
+
if (!(0, node_fs_1.existsSync)(dir)) {
|
|
91
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
92
|
+
}
|
|
93
|
+
const filename = (0, node_path_1.basename)(reportPath);
|
|
94
|
+
const destPath = (0, node_path_1.resolve)(dir, filename);
|
|
95
|
+
(0, node_fs_1.copyFileSync)(reportPath, destPath);
|
|
96
|
+
// 生成访问 URL
|
|
97
|
+
const reportUrl = config.baseUrl
|
|
98
|
+
? `${config.baseUrl.replace(/\/$/, "")}/${filename}`
|
|
99
|
+
: `file://${destPath}`;
|
|
100
|
+
return { success: true, reportUrl };
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
return { success: false, error: String(err) };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=report-uploader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-uploader.js","sourceRoot":"","sources":["../../src/utils/report-uploader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAgCH,gDAwBC;AAKD,oCAQC;AAnED,qCAA4E;AAC5E,yCAA8C;AA0B9C;;GAEG;AACH,SAAgB,kBAAkB;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAEhD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACH,QAAQ,EAAE,MAAM;YAChB,GAAG;YACH,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;SAC1C,CAAC;IACN,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACH,QAAQ,EAAE,MAAM;YAChB,GAAG;YACH,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;SAC1C,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,MAAoB;IACvE,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACpF,CAAC;AAED,sBAAsB;AACtB,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,MAAoB;IACjE,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAA,oBAAQ,EAAC,UAAU,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAI,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,GAAG,MAAM,CAAC,OAAO;aACpB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,QAAQ;gBACR,OAAO;gBACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YACnE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,EAAE,CAAC;QAC5E,CAAC;QAED,eAAe;QACf,IAAI,SAA6B,CAAC;QAClC,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0C,CAAC;YAC3E,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACL,eAAe;QACnB,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,CAAC;AACL,CAAC;AAED,eAAe;AACf,SAAS,aAAa,CAAC,UAAkB,EAAE,MAAoB;IAC3D,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAI,CAAC;QACxB,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,oBAAQ,EAAC,UAAU,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,mBAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAA,sBAAY,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEnC,WAAW;QACX,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO;YAC5B,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,QAAQ,EAAE;YACpD,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC;QAE3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,CAAC;AACL,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "frontend-guardian-core",
|
|
3
|
+
"version": "2.6.0",
|
|
4
|
+
"description": "Core analysis engine for frontend-guardian — AST-based scanning and auto-fixing",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"require": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"fg-core": "./bin/fg-core.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"bin",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/wzm111/frontend-guardian.git",
|
|
26
|
+
"directory": "lib"
|
|
27
|
+
},
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/wzm111/frontend-guardian/issues"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/wzm111/frontend-guardian#readme",
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc && tsc-alias",
|
|
34
|
+
"dev": "tsc --watch",
|
|
35
|
+
"test": "vitest run",
|
|
36
|
+
"test:watch": "vitest",
|
|
37
|
+
"lint": "eslint src/**/*.ts",
|
|
38
|
+
"typecheck": "tsc --noEmit",
|
|
39
|
+
"format": "biome format --write .",
|
|
40
|
+
"format:check": "biome format .",
|
|
41
|
+
"check": "biome check --write .",
|
|
42
|
+
"prepublishOnly": "npm run build && npm test"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"frontend",
|
|
46
|
+
"governance",
|
|
47
|
+
"i18n",
|
|
48
|
+
"lint",
|
|
49
|
+
"ast",
|
|
50
|
+
"codemod"
|
|
51
|
+
],
|
|
52
|
+
"author": "wzm111",
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=18.0.0"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@babel/core": "^7.26.0",
|
|
59
|
+
"@babel/parser": "^7.26.0",
|
|
60
|
+
"@babel/traverse": "^7.26.0",
|
|
61
|
+
"@babel/types": "^7.26.0",
|
|
62
|
+
"globby": "^14.1.0",
|
|
63
|
+
"minimatch": "^10.0.1",
|
|
64
|
+
"picocolors": "^1.1.0",
|
|
65
|
+
"yaml": "^2.7.0"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@biomejs/biome": "^2.4.16",
|
|
69
|
+
"@types/babel__core": "^7.20.5",
|
|
70
|
+
"@types/babel__traverse": "^7.20.6",
|
|
71
|
+
"@types/node": "^22.13.0",
|
|
72
|
+
"@vitest/coverage-v8": "^3.2.6",
|
|
73
|
+
"eslint": "^9.20.0",
|
|
74
|
+
"tsc-alias": "^1.8.17",
|
|
75
|
+
"typescript": "^5.7.0",
|
|
76
|
+
"vitest": "^3.0.0"
|
|
77
|
+
}
|
|
78
|
+
}
|