Skip to content

Commit e10143e

Browse files
committed
feat: 识别打包产物版权注释依赖
后台异步扫描少量主 JS 入口和 LICENSE sidecar,解析保留的 license/copyright 注释并合并为 JS 版权注释来源。 新增 bundle license 规则集,覆盖常见前端框架、图表、地图、编辑器和工具库。 插件版本升级到 1.2.3。
1 parent 8f37e1f commit e10143e

9 files changed

Lines changed: 587 additions & 3 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "stackprism",
33
"private": true,
4-
"version": "1.2.2",
4+
"version": "1.2.3",
55
"type": "module",
66
"description": "StackPrism 用于检测网页前端、后端、CDN、SaaS、广告营销、统计、登录、支付、网站程序和主题模板线索。",
77
"scripts": {

public/rules/index.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"page/frontend-frameworks.json",
66
"page/ui-frameworks.json",
77
"page/build-runtime.json",
8+
"page/bundle-license-libraries.json",
89
"page/frontend-extra.json",
910
"page/frontend-local-libraries.json",
1011
"page/frontend-cdn-libraries.json",
Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
{
2+
"page": {
3+
"bundleLicenseLibraries": [
4+
{
5+
"defaults": {
6+
"category": "前端库",
7+
"confidence": "",
8+
"matchType": "regex"
9+
},
10+
"rules": [
11+
{
12+
"name": "React",
13+
"url": "https://react.dev",
14+
"patterns": ["@license\\s+React\\b|react(?:\\.production|\\.development)?(?:\\.min)?\\.js|React\\s+v?\\d+\\.\\d+"]
15+
},
16+
{
17+
"name": "React DOM",
18+
"url": "https://react.dev",
19+
"patterns": ["react-dom(?:\\.production|\\.development)?(?:\\.min)?\\.js|@license\\s+React[\\s\\S]{0,120}react-dom"]
20+
},
21+
{
22+
"name": "Vue",
23+
"url": "https://vuejs.org",
24+
"patterns": [
25+
"Vue\\.js\\s+v?\\d+\\.\\d+|@vue/(?:runtime|shared|reactivity)|vue(?:\\.runtime)?(?:\\.global)?(?:\\.prod)?(?:\\.min)?\\.js"
26+
]
27+
},
28+
{
29+
"name": "Angular",
30+
"url": "https://angular.dev",
31+
"patterns": ["@angular/(?:core|common|router)|Angular\\s+v?\\d+\\.\\d+"]
32+
},
33+
{
34+
"name": "Svelte",
35+
"url": "https://svelte.dev",
36+
"patterns": ["\\bSvelte\\b[\\s\\S]{0,80}(?:MIT|license|copyright)|svelte(?:/internal|\\.js)"]
37+
},
38+
{
39+
"name": "Preact",
40+
"url": "https://preactjs.com",
41+
"patterns": ["\\bPreact\\b[\\s\\S]{0,80}(?:MIT|license|copyright)|preact(?:\\.module)?\\.js"]
42+
},
43+
{
44+
"name": "SolidJS",
45+
"url": "https://www.solidjs.com",
46+
"patterns": ["solid-js|\\bSolidJS\\b"]
47+
},
48+
{
49+
"name": "Lit",
50+
"url": "https://lit.dev",
51+
"patterns": ["@lit/(?:reactive-element|html)|\\bLit\\b[\\s\\S]{0,80}(?:license|copyright)"]
52+
},
53+
{
54+
"name": "Alpine.js",
55+
"url": "https://alpinejs.dev",
56+
"patterns": ["Alpine\\.js|alpinejs"]
57+
},
58+
{
59+
"name": "jQuery",
60+
"url": "https://jquery.com",
61+
"patterns": ["jQuery\\s+v?\\d+\\.\\d+|jquery(?:\\.min)?\\.js|jquery\\.org/license"]
62+
},
63+
{
64+
"name": "Lodash",
65+
"url": "https://lodash.com",
66+
"patterns": ["\\bLodash\\b|lodash(?:\\.min)?\\.js|lodash\\.com"]
67+
},
68+
{
69+
"name": "Underscore.js",
70+
"url": "https://underscorejs.org",
71+
"patterns": ["Underscore\\.js|underscore(?:\\.min)?\\.js|underscorejs\\.org"]
72+
},
73+
{
74+
"name": "RxJS",
75+
"url": "https://rxjs.dev",
76+
"patterns": ["\\bRxJS\\b|rxjs(?:\\.umd)?(?:\\.min)?\\.js|Reactive Extensions for JavaScript"]
77+
},
78+
{
79+
"name": "Axios",
80+
"url": "https://axios-http.com",
81+
"patterns": ["\\bAxios\\b\\s+v?\\d+\\.\\d+|axios(?:\\.min)?\\.js|axios is freely distributable"]
82+
},
83+
{
84+
"name": "date-fns",
85+
"url": "https://date-fns.org",
86+
"patterns": ["date-fns|DateFns"]
87+
},
88+
{
89+
"name": "Day.js",
90+
"url": "https://day.js.org",
91+
"patterns": ["Day\\.js|dayjs(?:\\.min)?\\.js|iamkun/dayjs"]
92+
},
93+
{
94+
"name": "Moment.js",
95+
"url": "https://momentjs.com",
96+
"patterns": ["Moment\\.js|moment(?:\\.min)?\\.js|momentjs\\.com"]
97+
},
98+
{
99+
"name": "Luxon",
100+
"url": "https://moment.github.io/luxon",
101+
"patterns": ["\\bLuxon\\b|moment\\.github\\.io/luxon"]
102+
},
103+
{
104+
"name": "D3.js",
105+
"url": "https://d3js.org",
106+
"patterns": [
107+
"\\bd3-(?:array|axis|brush|chord|color|dispatch|drag|ease|fetch|force|format|geo|hierarchy|interpolate|path|scale|selection|shape|time|timer|transition|zoom)\\b|\\bD3\\.js\\b"
108+
]
109+
},
110+
{
111+
"name": "ECharts",
112+
"url": "https://echarts.apache.org",
113+
"patterns": ["Apache ECharts|\\bECharts\\b|echarts(?:\\.min)?\\.js"]
114+
},
115+
{
116+
"name": "Chart.js",
117+
"url": "https://www.chartjs.org",
118+
"patterns": ["Chart\\.js|chartjs\\.org|chart(?:\\.umd)?(?:\\.min)?\\.js"]
119+
},
120+
{
121+
"name": "Three.js",
122+
"url": "https://threejs.org",
123+
"patterns": ["three\\.js|threejs\\.org|three(?:\\.module)?(?:\\.min)?\\.js"]
124+
},
125+
{
126+
"name": "Recharts",
127+
"url": "https://recharts.org",
128+
"patterns": ["\\bRecharts\\b|recharts(?:\\.min)?\\.js"]
129+
},
130+
{
131+
"name": "Mapbox GL JS",
132+
"url": "https://docs.mapbox.com/mapbox-gl-js",
133+
"patterns": ["Mapbox GL JS|mapbox-gl(?:\\.js)?"]
134+
},
135+
{
136+
"name": "Leaflet",
137+
"url": "https://leafletjs.com",
138+
"patterns": ["Leaflet\\s+v?\\d+\\.\\d+|leaflet(?:\\.min)?\\.js|leafletjs\\.com"]
139+
},
140+
{
141+
"name": "OpenLayers",
142+
"url": "https://openlayers.org",
143+
"patterns": ["OpenLayers|openlayers\\.org|ol(?:\\.js)?\\s+v?\\d+"]
144+
},
145+
{
146+
"name": "Bootstrap",
147+
"url": "https://getbootstrap.com",
148+
"patterns": ["Bootstrap\\s+v?\\d+\\.\\d+|getbootstrap\\.com|bootstrap(?:\\.bundle)?(?:\\.min)?\\.js"]
149+
},
150+
{
151+
"name": "Popper",
152+
"url": "https://popper.js.org",
153+
"patterns": ["@popperjs/core|Popper\\s+v?\\d+\\.\\d+|popper\\.js"]
154+
},
155+
{
156+
"name": "Floating UI",
157+
"url": "https://floating-ui.com",
158+
"patterns": ["@floating-ui/(?:core|dom|react)|Floating UI"]
159+
},
160+
{
161+
"name": "Framer Motion",
162+
"url": "https://motion.dev",
163+
"patterns": ["framer-motion|Framer Motion|motion-dom|motion-utils"]
164+
},
165+
{
166+
"name": "GSAP",
167+
"url": "https://gsap.com",
168+
"patterns": ["GreenSock|GSAP|gsap(?:\\.min)?\\.js"]
169+
},
170+
{
171+
"name": "Swiper",
172+
"url": "https://swiperjs.com",
173+
"patterns": ["Swiper\\s+v?\\d+\\.\\d+|swiper(?:\\.bundle)?(?:\\.min)?\\.js"]
174+
},
175+
{
176+
"name": "Redux",
177+
"url": "https://redux.js.org",
178+
"patterns": ["\\bRedux\\b|redux(?:\\.min)?\\.js"]
179+
},
180+
{
181+
"name": "Zustand",
182+
"url": "https://zustand-demo.pmnd.rs",
183+
"patterns": ["\\bZustand\\b|pmndrs/zustand"]
184+
},
185+
{
186+
"name": "TanStack Query",
187+
"url": "https://tanstack.com/query",
188+
"patterns": ["@tanstack/(?:react-query|query-core)|TanStack Query|React Query"]
189+
},
190+
{
191+
"name": "React Router",
192+
"url": "https://reactrouter.com",
193+
"patterns": ["react-router|React Router"]
194+
},
195+
{
196+
"name": "Radix UI",
197+
"url": "https://www.radix-ui.com",
198+
"patterns": ["@radix-ui/|Radix UI"]
199+
},
200+
{
201+
"name": "Lucide",
202+
"url": "https://lucide.dev",
203+
"patterns": ["lucide(?:-react|-vue|-svelte)?|Lucide Icons"]
204+
},
205+
{
206+
"name": "Heroicons",
207+
"url": "https://heroicons.com",
208+
"patterns": ["@heroicons/|Heroicons"]
209+
},
210+
{
211+
"name": "Font Awesome",
212+
"url": "https://fontawesome.com",
213+
"patterns": ["Font Awesome|@fortawesome/"]
214+
},
215+
{
216+
"name": "Monaco Editor",
217+
"url": "https://microsoft.github.io/monaco-editor",
218+
"patterns": ["Monaco Editor|monaco-editor"]
219+
},
220+
{
221+
"name": "CodeMirror",
222+
"url": "https://codemirror.net",
223+
"patterns": ["CodeMirror|@codemirror/"]
224+
},
225+
{
226+
"name": "Quill",
227+
"url": "https://quilljs.com",
228+
"patterns": ["\\bQuill\\b|quilljs\\.com"]
229+
},
230+
{
231+
"name": "ProseMirror",
232+
"url": "https://prosemirror.net",
233+
"patterns": ["ProseMirror|prosemirror-"]
234+
},
235+
{
236+
"name": "Prism",
237+
"url": "https://prismjs.com",
238+
"patterns": ["PrismJS|prismjs|prism(?:\\.min)?\\.js"]
239+
},
240+
{
241+
"name": "Highlight.js",
242+
"url": "https://highlightjs.org",
243+
"patterns": ["Highlight\\.js|highlightjs|hljs(?:\\.min)?\\.js"]
244+
}
245+
]
246+
}
247+
]
248+
}
249+
}

0 commit comments

Comments
 (0)