baseguard 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/.eslintrc.json +25 -0
  2. package/.prettierrc +8 -0
  3. package/README.md +94 -0
  4. package/bin/base.js +494 -0
  5. package/dist/ai/fix-manager.d.ts +67 -0
  6. package/dist/ai/fix-manager.d.ts.map +1 -0
  7. package/dist/ai/fix-manager.js +326 -0
  8. package/dist/ai/fix-manager.js.map +1 -0
  9. package/dist/ai/gemini-analyzer.d.ts +116 -0
  10. package/dist/ai/gemini-analyzer.d.ts.map +1 -0
  11. package/dist/ai/gemini-analyzer.js +572 -0
  12. package/dist/ai/gemini-analyzer.js.map +1 -0
  13. package/dist/ai/index.d.ts +4 -0
  14. package/dist/ai/index.d.ts.map +1 -0
  15. package/dist/ai/index.js +5 -0
  16. package/dist/ai/index.js.map +1 -0
  17. package/dist/ai/jules-implementer.d.ts +115 -0
  18. package/dist/ai/jules-implementer.d.ts.map +1 -0
  19. package/dist/ai/jules-implementer.js +387 -0
  20. package/dist/ai/jules-implementer.js.map +1 -0
  21. package/dist/commands/automation.d.ts +5 -0
  22. package/dist/commands/automation.d.ts.map +1 -0
  23. package/dist/commands/automation.js +305 -0
  24. package/dist/commands/automation.js.map +1 -0
  25. package/dist/commands/check.d.ts +9 -0
  26. package/dist/commands/check.d.ts.map +1 -0
  27. package/dist/commands/check.js +113 -0
  28. package/dist/commands/check.js.map +1 -0
  29. package/dist/commands/config.d.ts +11 -0
  30. package/dist/commands/config.d.ts.map +1 -0
  31. package/dist/commands/config.js +324 -0
  32. package/dist/commands/config.js.map +1 -0
  33. package/dist/commands/fix.d.ts +9 -0
  34. package/dist/commands/fix.d.ts.map +1 -0
  35. package/dist/commands/fix.js +207 -0
  36. package/dist/commands/fix.js.map +1 -0
  37. package/dist/commands/index.d.ts +6 -0
  38. package/dist/commands/index.d.ts.map +1 -0
  39. package/dist/commands/index.js +7 -0
  40. package/dist/commands/index.js.map +1 -0
  41. package/dist/commands/init.d.ts +9 -0
  42. package/dist/commands/init.d.ts.map +1 -0
  43. package/dist/commands/init.js +125 -0
  44. package/dist/commands/init.js.map +1 -0
  45. package/dist/core/api-key-manager.d.ts +83 -0
  46. package/dist/core/api-key-manager.d.ts.map +1 -0
  47. package/dist/core/api-key-manager.js +244 -0
  48. package/dist/core/api-key-manager.js.map +1 -0
  49. package/dist/core/baseguard.d.ts +46 -0
  50. package/dist/core/baseguard.d.ts.map +1 -0
  51. package/dist/core/baseguard.js +132 -0
  52. package/dist/core/baseguard.js.map +1 -0
  53. package/dist/core/baseline-checker.d.ts +63 -0
  54. package/dist/core/baseline-checker.d.ts.map +1 -0
  55. package/dist/core/baseline-checker.js +502 -0
  56. package/dist/core/baseline-checker.js.map +1 -0
  57. package/dist/core/cache-manager.d.ts +88 -0
  58. package/dist/core/cache-manager.d.ts.map +1 -0
  59. package/dist/core/cache-manager.js +213 -0
  60. package/dist/core/cache-manager.js.map +1 -0
  61. package/dist/core/configuration.d.ts +140 -0
  62. package/dist/core/configuration.d.ts.map +1 -0
  63. package/dist/core/configuration.js +474 -0
  64. package/dist/core/configuration.js.map +1 -0
  65. package/dist/core/directory-filter.d.ts +90 -0
  66. package/dist/core/directory-filter.d.ts.map +1 -0
  67. package/dist/core/directory-filter.js +319 -0
  68. package/dist/core/directory-filter.js.map +1 -0
  69. package/dist/core/error-handler.d.ts +110 -0
  70. package/dist/core/error-handler.d.ts.map +1 -0
  71. package/dist/core/error-handler.js +392 -0
  72. package/dist/core/error-handler.js.map +1 -0
  73. package/dist/core/file-processor.d.ts +80 -0
  74. package/dist/core/file-processor.d.ts.map +1 -0
  75. package/dist/core/file-processor.js +259 -0
  76. package/dist/core/file-processor.js.map +1 -0
  77. package/dist/core/gitignore-manager.d.ts +44 -0
  78. package/dist/core/gitignore-manager.d.ts.map +1 -0
  79. package/dist/core/gitignore-manager.js +147 -0
  80. package/dist/core/gitignore-manager.js.map +1 -0
  81. package/dist/core/index.d.ts +13 -0
  82. package/dist/core/index.d.ts.map +1 -0
  83. package/dist/core/index.js +13 -0
  84. package/dist/core/index.js.map +1 -0
  85. package/dist/core/lazy-loader.d.ts +68 -0
  86. package/dist/core/lazy-loader.d.ts.map +1 -0
  87. package/dist/core/lazy-loader.js +260 -0
  88. package/dist/core/lazy-loader.js.map +1 -0
  89. package/dist/core/memory-manager.d.ts +1 -0
  90. package/dist/core/memory-manager.d.ts.map +1 -0
  91. package/dist/core/memory-manager.js +2 -0
  92. package/dist/core/memory-manager.js.map +1 -0
  93. package/dist/core/startup-optimizer.d.ts +45 -0
  94. package/dist/core/startup-optimizer.d.ts.map +1 -0
  95. package/dist/core/startup-optimizer.js +140 -0
  96. package/dist/core/startup-optimizer.js.map +1 -0
  97. package/dist/git/automation-engine.d.ts +58 -0
  98. package/dist/git/automation-engine.d.ts.map +1 -0
  99. package/dist/git/automation-engine.js +318 -0
  100. package/dist/git/automation-engine.js.map +1 -0
  101. package/dist/git/github-manager.d.ts +71 -0
  102. package/dist/git/github-manager.d.ts.map +1 -0
  103. package/dist/git/github-manager.js +226 -0
  104. package/dist/git/github-manager.js.map +1 -0
  105. package/dist/git/hook-manager.d.ts +43 -0
  106. package/dist/git/hook-manager.d.ts.map +1 -0
  107. package/dist/git/hook-manager.js +191 -0
  108. package/dist/git/hook-manager.js.map +1 -0
  109. package/dist/git/index.d.ts +4 -0
  110. package/dist/git/index.d.ts.map +1 -0
  111. package/dist/git/index.js +5 -0
  112. package/dist/git/index.js.map +1 -0
  113. package/dist/index.d.ts +8 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +9 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/parsers/feature-validator.d.ts +60 -0
  118. package/dist/parsers/feature-validator.d.ts.map +1 -0
  119. package/dist/parsers/feature-validator.js +483 -0
  120. package/dist/parsers/feature-validator.js.map +1 -0
  121. package/dist/parsers/index.d.ts +8 -0
  122. package/dist/parsers/index.d.ts.map +1 -0
  123. package/dist/parsers/index.js +9 -0
  124. package/dist/parsers/index.js.map +1 -0
  125. package/dist/parsers/parser-manager.d.ts +103 -0
  126. package/dist/parsers/parser-manager.d.ts.map +1 -0
  127. package/dist/parsers/parser-manager.js +321 -0
  128. package/dist/parsers/parser-manager.js.map +1 -0
  129. package/dist/parsers/parser.d.ts +23 -0
  130. package/dist/parsers/parser.d.ts.map +1 -0
  131. package/dist/parsers/parser.js +6 -0
  132. package/dist/parsers/parser.js.map +1 -0
  133. package/dist/parsers/react-parser.d.ts +22 -0
  134. package/dist/parsers/react-parser.d.ts.map +1 -0
  135. package/dist/parsers/react-parser.js +307 -0
  136. package/dist/parsers/react-parser.js.map +1 -0
  137. package/dist/parsers/svelte-parser.d.ts +33 -0
  138. package/dist/parsers/svelte-parser.d.ts.map +1 -0
  139. package/dist/parsers/svelte-parser.js +408 -0
  140. package/dist/parsers/svelte-parser.js.map +1 -0
  141. package/dist/parsers/vanilla-parser.d.ts +31 -0
  142. package/dist/parsers/vanilla-parser.d.ts.map +1 -0
  143. package/dist/parsers/vanilla-parser.js +590 -0
  144. package/dist/parsers/vanilla-parser.js.map +1 -0
  145. package/dist/parsers/vue-parser.d.ts +9 -0
  146. package/dist/parsers/vue-parser.d.ts.map +1 -0
  147. package/dist/parsers/vue-parser.js +16 -0
  148. package/dist/parsers/vue-parser.js.map +1 -0
  149. package/dist/terminal-header.d.ts +12 -0
  150. package/dist/terminal-header.js +45 -0
  151. package/dist/types/index.d.ts +83 -0
  152. package/dist/types/index.d.ts.map +1 -0
  153. package/dist/types/index.js +5 -0
  154. package/dist/types/index.js.map +1 -0
  155. package/dist/ui/components.d.ts +133 -0
  156. package/dist/ui/components.d.ts.map +1 -0
  157. package/dist/ui/components.js +482 -0
  158. package/dist/ui/components.js.map +1 -0
  159. package/dist/ui/help.d.ts +11 -0
  160. package/dist/ui/help.d.ts.map +1 -0
  161. package/dist/ui/help.js +161 -0
  162. package/dist/ui/help.js.map +1 -0
  163. package/dist/ui/index.d.ts +5 -0
  164. package/dist/ui/index.d.ts.map +1 -0
  165. package/dist/ui/index.js +5 -0
  166. package/dist/ui/index.js.map +1 -0
  167. package/dist/ui/prompts.d.ts +63 -0
  168. package/dist/ui/prompts.d.ts.map +1 -0
  169. package/dist/ui/prompts.js +611 -0
  170. package/dist/ui/prompts.js.map +1 -0
  171. package/dist/ui/terminal-header.d.ts +13 -0
  172. package/dist/ui/terminal-header.d.ts.map +1 -0
  173. package/dist/ui/terminal-header.js +46 -0
  174. package/dist/ui/terminal-header.js.map +1 -0
  175. package/package.json +80 -0
  176. package/src/ai/__tests__/gemini-analyzer.test.ts +181 -0
  177. package/src/ai/fix-manager.ts +362 -0
  178. package/src/ai/gemini-analyzer.ts +671 -0
  179. package/src/ai/index.ts +4 -0
  180. package/src/ai/jules-implementer.ts +459 -0
  181. package/src/commands/automation.ts +344 -0
  182. package/src/commands/check.ts +299 -0
  183. package/src/commands/config.ts +365 -0
  184. package/src/commands/fix.ts +234 -0
  185. package/src/commands/index.ts +6 -0
  186. package/src/commands/init.ts +142 -0
  187. package/src/commands/status.ts +0 -0
  188. package/src/core/api-key-manager.ts +298 -0
  189. package/src/core/baseguard.ts +742 -0
  190. package/src/core/baseline-checker.ts +563 -0
  191. package/src/core/cache-manager.ts +270 -0
  192. package/src/core/configuration-recovery.ts +676 -0
  193. package/src/core/configuration.ts +559 -0
  194. package/src/core/debug-logger.ts +590 -0
  195. package/src/core/directory-filter.ts +421 -0
  196. package/src/core/error-handler.ts +517 -0
  197. package/src/core/file-processor.ts +331 -0
  198. package/src/core/gitignore-manager.ts +169 -0
  199. package/src/core/graceful-degradation-manager.ts +596 -0
  200. package/src/core/index.ts +13 -0
  201. package/src/core/lazy-loader.ts +307 -0
  202. package/src/core/logger.ts +0 -0
  203. package/src/core/memory-manager.ts +294 -0
  204. package/src/core/startup-optimizer.ts +173 -0
  205. package/src/core/system-error-handler.ts +746 -0
  206. package/src/git/automation-engine.ts +361 -0
  207. package/src/git/github-manager.ts +260 -0
  208. package/src/git/hook-manager.ts +210 -0
  209. package/src/git/index.ts +4 -0
  210. package/src/index.ts +8 -0
  211. package/src/parsers/feature-validator.ts +559 -0
  212. package/src/parsers/index.ts +8 -0
  213. package/src/parsers/parser-manager.ts +419 -0
  214. package/src/parsers/parser.ts +26 -0
  215. package/src/parsers/react-parser-optimized.ts +161 -0
  216. package/src/parsers/react-parser.ts +359 -0
  217. package/src/parsers/svelte-parser.ts +506 -0
  218. package/src/parsers/vanilla-parser.ts +682 -0
  219. package/src/parsers/vue-parser.ts +472 -0
  220. package/src/types/index.ts +92 -0
  221. package/src/ui/components.ts +567 -0
  222. package/src/ui/help.ts +193 -0
  223. package/src/ui/index.ts +4 -0
  224. package/src/ui/prompts.ts +688 -0
  225. package/src/ui/terminal-header.ts +59 -0
  226. package/test-config-commands.js +56 -0
  227. package/test-header-simple.js +33 -0
  228. package/test-terminal-header.js +12 -0
  229. package/test-ui.js +29 -0
  230. package/tests/e2e/baseguard.e2e.test.ts +516 -0
  231. package/tests/e2e/cross-platform.e2e.test.ts +420 -0
  232. package/tests/e2e/git-integration.e2e.test.ts +487 -0
  233. package/tests/fixtures/react-project/package.json +14 -0
  234. package/tests/fixtures/react-project/src/App.css +76 -0
  235. package/tests/fixtures/react-project/src/App.tsx +77 -0
  236. package/tests/fixtures/svelte-project/package.json +11 -0
  237. package/tests/fixtures/svelte-project/src/App.svelte +369 -0
  238. package/tests/fixtures/vanilla-project/index.html +76 -0
  239. package/tests/fixtures/vanilla-project/script.js +331 -0
  240. package/tests/fixtures/vanilla-project/styles.css +359 -0
  241. package/tests/fixtures/vue-project/package.json +12 -0
  242. package/tests/fixtures/vue-project/src/App.vue +216 -0
  243. package/tsconfig.json +36 -0
  244. package/vitest.config.ts +10 -0
@@ -0,0 +1,483 @@
1
+ import webFeatures from 'web-features';
2
+ /**
3
+ * Comprehensive web-features validation and filtering system
4
+ * Validates detected features against the complete web-features package
5
+ * and filters out framework-specific features while capturing all web platform scope
6
+ */
7
+ export class FeatureValidator {
8
+ FEATURE_ID_MAP;
9
+ FRAMEWORK_SPECIFIC_PATTERNS;
10
+ constructor() {
11
+ this.FEATURE_ID_MAP = this.buildFeatureIdMap();
12
+ this.FRAMEWORK_SPECIFIC_PATTERNS = this.buildFrameworkPatterns();
13
+ }
14
+ /**
15
+ * Validate and filter detected features against web-features package
16
+ */
17
+ async validateFeatures(detectedFeatures, concurrency = 10) {
18
+ const validFeatures = [];
19
+ // Process features in batches for performance
20
+ const batches = this.createBatches(detectedFeatures, concurrency);
21
+ for (const batch of batches) {
22
+ const batchResults = await Promise.all(batch.map(feature => this.validateSingleFeature(feature)));
23
+ validFeatures.push(...batchResults.filter(Boolean));
24
+ }
25
+ return this.deduplicateFeatures(validFeatures);
26
+ }
27
+ /**
28
+ * Validate a single feature against web-features package
29
+ */
30
+ async validateSingleFeature(feature) {
31
+ try {
32
+ // Skip framework-specific features
33
+ if (this.isFrameworkSpecific(feature.feature)) {
34
+ return null;
35
+ }
36
+ // Map feature to web-features ID
37
+ const webFeatureId = this.mapToWebFeatureId(feature.feature);
38
+ if (!webFeatureId) {
39
+ return null;
40
+ }
41
+ // Validate against web-features package
42
+ const webFeatureData = webFeatures[webFeatureId];
43
+ if (!webFeatureData) {
44
+ return null;
45
+ }
46
+ // Return validated feature with enhanced metadata
47
+ return {
48
+ ...feature,
49
+ feature: webFeatureId, // Use standardized web-features ID
50
+ context: this.enhanceContext(feature.context, feature.type)
51
+ };
52
+ }
53
+ catch (error) {
54
+ console.warn(`Warning: Could not validate feature ${feature.feature}: ${error instanceof Error ? error.message : 'Unknown error'}`);
55
+ return null;
56
+ }
57
+ }
58
+ /**
59
+ * Build comprehensive feature ID mapping for ALL web platform technologies
60
+ */
61
+ buildFeatureIdMap() {
62
+ const map = new Map();
63
+ // CSS Properties mapping
64
+ const cssPropertyMap = {
65
+ // Container Queries
66
+ 'container-type': 'container-queries',
67
+ 'container-name': 'container-queries',
68
+ 'container': 'container-queries',
69
+ // Grid Layout
70
+ 'display': 'css-grid',
71
+ 'grid-template-columns': 'css-grid',
72
+ 'grid-template-rows': 'css-grid',
73
+ 'grid-template-areas': 'css-grid',
74
+ 'grid-column': 'css-grid',
75
+ 'grid-row': 'css-grid',
76
+ 'grid-area': 'css-grid',
77
+ 'gap': 'css-grid-gap',
78
+ 'grid-gap': 'css-grid-gap',
79
+ 'column-gap': 'css-grid-gap',
80
+ 'row-gap': 'css-grid-gap',
81
+ // Flexbox
82
+ 'flex': 'flexbox',
83
+ 'flex-direction': 'flexbox',
84
+ 'flex-wrap': 'flexbox',
85
+ 'justify-content': 'flexbox',
86
+ 'align-items': 'flexbox',
87
+ 'align-content': 'flexbox',
88
+ 'align-self': 'flexbox',
89
+ // Modern Layout
90
+ 'aspect-ratio': 'aspect-ratio',
91
+ 'object-fit': 'object-fit',
92
+ 'object-position': 'object-fit',
93
+ // Visual Effects
94
+ 'backdrop-filter': 'backdrop-filter',
95
+ 'filter': 'css-filters',
96
+ 'mix-blend-mode': 'css-mixblendmode',
97
+ 'clip-path': 'css-clip-path',
98
+ 'mask': 'css-masks',
99
+ // Color & Appearance
100
+ 'color-scheme': 'color-scheme',
101
+ 'accent-color': 'accent-color',
102
+ // Scrolling
103
+ 'scroll-behavior': 'scroll-behavior',
104
+ 'scroll-snap-type': 'scroll-snap',
105
+ 'scroll-snap-align': 'scroll-snap',
106
+ 'overscroll-behavior': 'overscroll-behavior',
107
+ // Interaction
108
+ 'touch-action': 'touch-action',
109
+ 'user-select': 'user-select',
110
+ // Custom Properties
111
+ '--': 'css-variables',
112
+ 'var(': 'css-variables',
113
+ // Functions
114
+ 'calc(': 'calc',
115
+ 'clamp(': 'css-math-functions',
116
+ 'min(': 'css-math-functions',
117
+ 'max(': 'css-math-functions',
118
+ // Transforms & Animations
119
+ 'transform': 'transforms2d',
120
+ 'transform-origin': 'transforms2d',
121
+ 'perspective': 'transforms3d',
122
+ 'animation': 'css-animation',
123
+ 'transition': 'css-transitions',
124
+ 'will-change': 'will-change',
125
+ 'contain': 'css-containment',
126
+ 'content-visibility': 'content-visibility'
127
+ };
128
+ // CSS Selectors mapping
129
+ const cssSelectorMap = {
130
+ ':has()': 'css-has',
131
+ ':is()': 'css-matches-pseudo',
132
+ ':where()': 'css-where-pseudo',
133
+ ':focus-visible': 'focus-visible',
134
+ ':focus-within': 'focus-within',
135
+ '::backdrop': 'backdrop',
136
+ '::placeholder': 'placeholder',
137
+ '::marker': 'css-marker-pseudo'
138
+ };
139
+ // JavaScript APIs mapping
140
+ const jsApiMap = {
141
+ // Canvas APIs
142
+ 'getContext': 'canvas',
143
+ 'CanvasRenderingContext2D': 'canvas',
144
+ 'WebGLRenderingContext': 'webgl',
145
+ 'WebGL2RenderingContext': 'webgl2',
146
+ 'OffscreenCanvas': 'offscreen-canvas',
147
+ 'ImageBitmap': 'createimagebitmap',
148
+ 'createImageBitmap': 'createimagebitmap',
149
+ 'Path2D': 'path2d',
150
+ // WebRTC APIs
151
+ 'RTCPeerConnection': 'rtcpeerconnection',
152
+ 'RTCDataChannel': 'rtcdatachannel',
153
+ 'getUserMedia': 'getusermedia',
154
+ 'getDisplayMedia': 'getdisplaymedia',
155
+ 'MediaStream': 'mediastream',
156
+ // WebAssembly
157
+ 'WebAssembly': 'wasm',
158
+ 'WebAssembly.instantiate': 'wasm',
159
+ 'WebAssembly.compile': 'wasm',
160
+ // Service Workers
161
+ 'ServiceWorker': 'serviceworkers',
162
+ 'navigator.serviceWorker': 'serviceworkers',
163
+ 'Cache': 'cache',
164
+ 'caches': 'cache',
165
+ 'PushManager': 'push-api',
166
+ 'Notification': 'notifications',
167
+ // DOM APIs
168
+ 'querySelector': 'queryselector',
169
+ 'querySelectorAll': 'queryselector',
170
+ 'addEventListener': 'addeventlistener',
171
+ 'CustomEvent': 'customevent',
172
+ 'MutationObserver': 'mutationobserver',
173
+ 'ResizeObserver': 'resizeobserver',
174
+ 'IntersectionObserver': 'intersectionobserver',
175
+ 'AbortController': 'abortcontroller',
176
+ 'FormData': 'formdata',
177
+ 'URLSearchParams': 'urlsearchparams',
178
+ 'URL': 'url',
179
+ // Fetch API
180
+ 'fetch': 'fetch',
181
+ 'Request': 'fetch',
182
+ 'Response': 'fetch',
183
+ 'Headers': 'fetch',
184
+ // File APIs
185
+ 'Blob': 'fileapi',
186
+ 'File': 'fileapi',
187
+ 'FileReader': 'filereader',
188
+ // Storage APIs
189
+ 'localStorage': 'localstorage',
190
+ 'sessionStorage': 'sessionstorage',
191
+ 'indexedDB': 'indexeddb',
192
+ // Crypto APIs
193
+ 'crypto': 'cryptography',
194
+ 'crypto.getRandomValues': 'getrandomvalues',
195
+ 'crypto.subtle': 'subtlecrypto',
196
+ // Performance APIs
197
+ 'performance': 'high-resolution-time',
198
+ 'performance.now': 'high-resolution-time',
199
+ 'PerformanceObserver': 'performance-observer',
200
+ // Audio/Video APIs
201
+ 'AudioContext': 'audio-api',
202
+ 'MediaRecorder': 'mediarecorder',
203
+ 'MediaSource': 'mediasource',
204
+ 'HTMLMediaElement': 'audio',
205
+ // Modern JavaScript APIs
206
+ 'structuredClone': 'structured-clone',
207
+ 'WeakRef': 'weakrefs',
208
+ 'FinalizationRegistry': 'weakrefs',
209
+ 'AggregateError': 'promise-any',
210
+ // ECMAScript features
211
+ 'optional-chaining': 'optional-chaining',
212
+ 'nullish-coalescing': 'nullish-coalescing',
213
+ 'private-fields': 'private-class-fields',
214
+ 'private-methods': 'private-class-methods',
215
+ 'top-level-await': 'top-level-await',
216
+ 'dynamic-import': 'es6-module-dynamic-import',
217
+ 'bigint': 'bigint',
218
+ 'numeric-separators': 'numeric-separators',
219
+ // Intl APIs
220
+ 'Intl.DateTimeFormat': 'internationalization',
221
+ 'Intl.NumberFormat': 'internationalization',
222
+ 'Intl.Collator': 'internationalization',
223
+ 'Intl.PluralRules': 'intl-pluralrules',
224
+ 'Intl.RelativeTimeFormat': 'intl-relativetimeformat',
225
+ 'Intl.ListFormat': 'intl-listformat',
226
+ 'Intl.Locale': 'intl-locale',
227
+ // Streams API
228
+ 'ReadableStream': 'streams',
229
+ 'WritableStream': 'streams',
230
+ 'TransformStream': 'streams',
231
+ // Web Components
232
+ 'customElements': 'custom-elementsv1',
233
+ 'ShadowRoot': 'shadowdomv1',
234
+ 'HTMLTemplateElement': 'template',
235
+ // Pointer Events
236
+ 'PointerEvent': 'pointer',
237
+ 'setPointerCapture': 'pointer',
238
+ // Touch Events
239
+ 'TouchEvent': 'touch',
240
+ // Gamepad API
241
+ 'navigator.getGamepads': 'gamepad',
242
+ 'Gamepad': 'gamepad',
243
+ // Battery API
244
+ 'navigator.getBattery': 'battery-status',
245
+ 'BatteryManager': 'battery-status',
246
+ // Device APIs
247
+ 'DeviceOrientationEvent': 'deviceorientation',
248
+ 'DeviceMotionEvent': 'devicemotion'
249
+ };
250
+ // HTML Elements mapping
251
+ const htmlElementMap = {
252
+ 'dialog': 'dialog',
253
+ 'details': 'details',
254
+ 'summary': 'details',
255
+ 'main': 'html5semantic',
256
+ 'article': 'html5semantic',
257
+ 'section': 'html5semantic',
258
+ 'nav': 'html5semantic',
259
+ 'aside': 'html5semantic',
260
+ 'header': 'html5semantic',
261
+ 'footer': 'html5semantic',
262
+ 'figure': 'html5semantic',
263
+ 'figcaption': 'html5semantic',
264
+ 'time': 'html5semantic',
265
+ 'mark': 'html5semantic',
266
+ 'progress': 'progressmeter',
267
+ 'meter': 'progressmeter',
268
+ 'canvas': 'canvas',
269
+ 'video': 'video',
270
+ 'audio': 'audio',
271
+ 'source': 'video',
272
+ 'track': 'video-track',
273
+ 'picture': 'picture',
274
+ 'datalist': 'datalist',
275
+ 'output': 'form-validation',
276
+ 'template': 'template',
277
+ 'slot': 'shadowdomv1'
278
+ };
279
+ // HTML Attributes mapping
280
+ const htmlAttributeMap = {
281
+ 'loading': 'loading-lazy-attr',
282
+ 'decoding': 'img-decode-async',
283
+ 'fetchpriority': 'priority-hints',
284
+ 'enterkeyhint': 'mdn-html_global_attributes_enterkeyhint',
285
+ 'inputmode': 'input-inputmode',
286
+ 'autocomplete': 'form-attribute-autocomplete',
287
+ 'crossorigin': 'cors',
288
+ 'integrity': 'subresource-integrity',
289
+ 'referrerpolicy': 'referrer-policy'
290
+ };
291
+ // At-rules mapping
292
+ const atRuleMap = {
293
+ '@supports': 'css-featurequeries',
294
+ '@container': 'container-queries',
295
+ '@media': 'css-mediaqueries',
296
+ '@import': 'css-import',
297
+ '@keyframes': 'css-animation',
298
+ '@font-face': 'fontface',
299
+ '@layer': 'css-cascade-layers'
300
+ };
301
+ // Combine all mappings
302
+ Object.entries(cssPropertyMap).forEach(([key, value]) => map.set(key, value));
303
+ Object.entries(cssSelectorMap).forEach(([key, value]) => map.set(key, value));
304
+ Object.entries(jsApiMap).forEach(([key, value]) => map.set(key, value));
305
+ Object.entries(htmlElementMap).forEach(([key, value]) => map.set(key, value));
306
+ Object.entries(htmlAttributeMap).forEach(([key, value]) => map.set(key, value));
307
+ Object.entries(atRuleMap).forEach(([key, value]) => map.set(key, value));
308
+ return map;
309
+ }
310
+ /**
311
+ * Build patterns to identify framework-specific features
312
+ */
313
+ buildFrameworkPatterns() {
314
+ return [
315
+ // React patterns
316
+ /^use[A-Z]/, // React hooks (useState, useEffect, etc.)
317
+ /^React/, // React namespace
318
+ /^jsx/, // JSX elements
319
+ /^_jsx/, // JSX runtime
320
+ /^Component$/, // React.Component
321
+ /^PureComponent$/, // React.PureComponent
322
+ /^Fragment$/, // React.Fragment
323
+ /^createElement$/, // React.createElement
324
+ /^cloneElement$/, // React.cloneElement
325
+ /^ReactDOM/, // ReactDOM namespace
326
+ // Vue patterns
327
+ /^ref$/, // Vue ref
328
+ /^reactive$/, // Vue reactive
329
+ /^computed$/, // Vue computed
330
+ /^watch$/, // Vue watch
331
+ /^onMounted$/, // Vue lifecycle
332
+ /^onUnmounted$/, // Vue lifecycle
333
+ /^defineComponent$/, // Vue defineComponent
334
+ /^defineProps$/, // Vue defineProps
335
+ /^defineEmits$/, // Vue defineEmits
336
+ /^nextTick$/, // Vue nextTick
337
+ /^provide$/, // Vue provide
338
+ /^inject$/, // Vue inject
339
+ /^toRef$/, // Vue toRef
340
+ /^toRefs$/, // Vue toRefs
341
+ /^unref$/, // Vue unref
342
+ /^isRef$/, // Vue isRef
343
+ /^useRouter$/, // Vue Router
344
+ /^useRoute$/, // Vue Router
345
+ /^useStore$/, // Vuex/Pinia
346
+ // Svelte patterns
347
+ /^writable$/, // Svelte stores
348
+ /^readable$/, // Svelte stores
349
+ /^derived$/, // Svelte stores
350
+ /^onMount$/, // Svelte lifecycle
351
+ /^onDestroy$/, // Svelte lifecycle
352
+ /^beforeUpdate$/, // Svelte lifecycle
353
+ /^afterUpdate$/, // Svelte lifecycle
354
+ /^tick$/, // Svelte tick
355
+ /^setContext$/, // Svelte context
356
+ /^getContext$/, // Svelte context
357
+ /^createEventDispatcher$/, // Svelte events
358
+ /^goto$/, // SvelteKit
359
+ /^page$/, // SvelteKit
360
+ /^navigating$/, // SvelteKit
361
+ // Angular patterns (for future support)
362
+ /^ng[A-Z]/, // Angular directives
363
+ /^Injectable$/, // Angular Injectable
364
+ /^Component$/, // Angular Component (when in Angular context)
365
+ /^Directive$/, // Angular Directive
366
+ /^Pipe$/, // Angular Pipe
367
+ // Framework directive patterns
368
+ /^v-/, // Vue directives
369
+ /^bind:/, // Svelte directives
370
+ /^on:/, // Svelte directives
371
+ /^use:/, // Svelte directives
372
+ /^\*ng/, // Angular structural directives
373
+ /^\[/, // Angular property binding
374
+ /^\(/, // Angular event binding
375
+ ];
376
+ }
377
+ /**
378
+ * Check if a feature is framework-specific
379
+ */
380
+ isFrameworkSpecific(featureName) {
381
+ return this.FRAMEWORK_SPECIFIC_PATTERNS.some(pattern => pattern.test(featureName));
382
+ }
383
+ /**
384
+ * Map detected feature to web-features ID
385
+ */
386
+ mapToWebFeatureId(featureName) {
387
+ // Direct mapping
388
+ if (this.FEATURE_ID_MAP.has(featureName)) {
389
+ return this.FEATURE_ID_MAP.get(featureName);
390
+ }
391
+ // Handle CSS custom properties
392
+ if (featureName.startsWith('--')) {
393
+ return 'css-variables';
394
+ }
395
+ // Handle member expressions (e.g., 'navigator.geolocation')
396
+ if (featureName.includes('.')) {
397
+ const parts = featureName.split('.');
398
+ const lastPart = parts[parts.length - 1];
399
+ // Try mapping the full expression first
400
+ if (this.FEATURE_ID_MAP.has(featureName)) {
401
+ return this.FEATURE_ID_MAP.get(featureName);
402
+ }
403
+ // Try mapping just the method/property name
404
+ if (lastPart && this.FEATURE_ID_MAP.has(lastPart)) {
405
+ return this.FEATURE_ID_MAP.get(lastPart);
406
+ }
407
+ // Try mapping the object name
408
+ const objectName = parts[0];
409
+ if (objectName && this.FEATURE_ID_MAP.has(objectName)) {
410
+ return this.FEATURE_ID_MAP.get(objectName);
411
+ }
412
+ }
413
+ // Check if the feature exists directly in web-features
414
+ if (webFeatures[featureName]) {
415
+ return featureName;
416
+ }
417
+ return null;
418
+ }
419
+ /**
420
+ * Enhance context information for better display
421
+ */
422
+ enhanceContext(context, type) {
423
+ // Limit context length
424
+ const maxLength = 100;
425
+ if (context.length > maxLength) {
426
+ context = context.substring(0, maxLength) + '...';
427
+ }
428
+ // Add type-specific formatting
429
+ switch (type) {
430
+ case 'css':
431
+ return context.includes(':') ? context : `${context}: ...`;
432
+ case 'js':
433
+ return context;
434
+ case 'html':
435
+ return context.startsWith('<') ? context : `<${context}>`;
436
+ default:
437
+ return context;
438
+ }
439
+ }
440
+ /**
441
+ * Create batches for concurrent processing
442
+ */
443
+ createBatches(items, batchSize) {
444
+ const batches = [];
445
+ for (let i = 0; i < items.length; i += batchSize) {
446
+ batches.push(items.slice(i, i + batchSize));
447
+ }
448
+ return batches;
449
+ }
450
+ /**
451
+ * Remove duplicate features based on feature ID, file, and line
452
+ */
453
+ deduplicateFeatures(features) {
454
+ const seen = new Set();
455
+ return features.filter(feature => {
456
+ const key = `${feature.feature}:${feature.file}:${feature.line}:${feature.column}`;
457
+ if (seen.has(key)) {
458
+ return false;
459
+ }
460
+ seen.add(key);
461
+ return true;
462
+ });
463
+ }
464
+ /**
465
+ * Get all supported web-features IDs for validation
466
+ */
467
+ getSupportedFeatures() {
468
+ return Object.keys(webFeatures);
469
+ }
470
+ /**
471
+ * Check if a specific feature ID is supported by web-features
472
+ */
473
+ isFeatureSupported(featureId) {
474
+ return featureId in webFeatures;
475
+ }
476
+ /**
477
+ * Get feature data from web-features package
478
+ */
479
+ getFeatureData(featureId) {
480
+ return webFeatures[featureId] || null;
481
+ }
482
+ }
483
+ //# sourceMappingURL=feature-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-validator.js","sourceRoot":"","sources":["../../src/parsers/feature-validator.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IACV,cAAc,CAAsB;IACpC,2BAA2B,CAAW;IAEvD;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/C,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,gBAAmC,EACnC,cAAsB,EAAE;QAExB,MAAM,aAAa,GAAsB,EAAE,CAAC;QAE5C,8CAA8C;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAElE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAC1D,CAAC;YAEF,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAsB,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CAAC,OAAwB;QAC1D,IAAI,CAAC;YACH,mCAAmC;YACnC,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,iCAAiC;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,wCAAwC;YACxC,MAAM,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,kDAAkD;YAClD,OAAO;gBACL,GAAG,OAAO;gBACV,OAAO,EAAE,YAAY,EAAE,mCAAmC;gBAC1D,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;aAC5D,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,uCAAuC,OAAO,CAAC,OAAO,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YACpI,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEtC,yBAAyB;QACzB,MAAM,cAAc,GAAG;YACrB,oBAAoB;YACpB,gBAAgB,EAAE,mBAAmB;YACrC,gBAAgB,EAAE,mBAAmB;YACrC,WAAW,EAAE,mBAAmB;YAEhC,cAAc;YACd,SAAS,EAAE,UAAU;YACrB,uBAAuB,EAAE,UAAU;YACnC,oBAAoB,EAAE,UAAU;YAChC,qBAAqB,EAAE,UAAU;YACjC,aAAa,EAAE,UAAU;YACzB,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,UAAU;YACvB,KAAK,EAAE,cAAc;YACrB,UAAU,EAAE,cAAc;YAC1B,YAAY,EAAE,cAAc;YAC5B,SAAS,EAAE,cAAc;YAEzB,UAAU;YACV,MAAM,EAAE,SAAS;YACjB,gBAAgB,EAAE,SAAS;YAC3B,WAAW,EAAE,SAAS;YACtB,iBAAiB,EAAE,SAAS;YAC5B,aAAa,EAAE,SAAS;YACxB,eAAe,EAAE,SAAS;YAC1B,YAAY,EAAE,SAAS;YAEvB,gBAAgB;YAChB,cAAc,EAAE,cAAc;YAC9B,YAAY,EAAE,YAAY;YAC1B,iBAAiB,EAAE,YAAY;YAE/B,iBAAiB;YACjB,iBAAiB,EAAE,iBAAiB;YACpC,QAAQ,EAAE,aAAa;YACvB,gBAAgB,EAAE,kBAAkB;YACpC,WAAW,EAAE,eAAe;YAC5B,MAAM,EAAE,WAAW;YAEnB,qBAAqB;YACrB,cAAc,EAAE,cAAc;YAC9B,cAAc,EAAE,cAAc;YAE9B,YAAY;YACZ,iBAAiB,EAAE,iBAAiB;YACpC,kBAAkB,EAAE,aAAa;YACjC,mBAAmB,EAAE,aAAa;YAClC,qBAAqB,EAAE,qBAAqB;YAE5C,cAAc;YACd,cAAc,EAAE,cAAc;YAC9B,aAAa,EAAE,aAAa;YAE5B,oBAAoB;YACpB,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,eAAe;YAEvB,YAAY;YACZ,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,oBAAoB;YAC9B,MAAM,EAAE,oBAAoB;YAC5B,MAAM,EAAE,oBAAoB;YAE5B,0BAA0B;YAC1B,WAAW,EAAE,cAAc;YAC3B,kBAAkB,EAAE,cAAc;YAClC,aAAa,EAAE,cAAc;YAC7B,WAAW,EAAE,eAAe;YAC5B,YAAY,EAAE,iBAAiB;YAC/B,aAAa,EAAE,aAAa;YAC5B,SAAS,EAAE,iBAAiB;YAC5B,oBAAoB,EAAE,oBAAoB;SAC3C,CAAC;QAEF,wBAAwB;QACxB,MAAM,cAAc,GAAG;YACrB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,oBAAoB;YAC7B,UAAU,EAAE,kBAAkB;YAC9B,gBAAgB,EAAE,eAAe;YACjC,eAAe,EAAE,cAAc;YAC/B,YAAY,EAAE,UAAU;YACxB,eAAe,EAAE,aAAa;YAC9B,UAAU,EAAE,mBAAmB;SAChC,CAAC;QAEF,0BAA0B;QAC1B,MAAM,QAAQ,GAAG;YACf,cAAc;YACd,YAAY,EAAE,QAAQ;YACtB,0BAA0B,EAAE,QAAQ;YACpC,uBAAuB,EAAE,OAAO;YAChC,wBAAwB,EAAE,QAAQ;YAClC,iBAAiB,EAAE,kBAAkB;YACrC,aAAa,EAAE,mBAAmB;YAClC,mBAAmB,EAAE,mBAAmB;YACxC,QAAQ,EAAE,QAAQ;YAElB,cAAc;YACd,mBAAmB,EAAE,mBAAmB;YACxC,gBAAgB,EAAE,gBAAgB;YAClC,cAAc,EAAE,cAAc;YAC9B,iBAAiB,EAAE,iBAAiB;YACpC,aAAa,EAAE,aAAa;YAE5B,cAAc;YACd,aAAa,EAAE,MAAM;YACrB,yBAAyB,EAAE,MAAM;YACjC,qBAAqB,EAAE,MAAM;YAE7B,kBAAkB;YAClB,eAAe,EAAE,gBAAgB;YACjC,yBAAyB,EAAE,gBAAgB;YAC3C,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,OAAO;YACjB,aAAa,EAAE,UAAU;YACzB,cAAc,EAAE,eAAe;YAE/B,WAAW;YACX,eAAe,EAAE,eAAe;YAChC,kBAAkB,EAAE,eAAe;YACnC,kBAAkB,EAAE,kBAAkB;YACtC,aAAa,EAAE,aAAa;YAC5B,kBAAkB,EAAE,kBAAkB;YACtC,gBAAgB,EAAE,gBAAgB;YAClC,sBAAsB,EAAE,sBAAsB;YAC9C,iBAAiB,EAAE,iBAAiB;YACpC,UAAU,EAAE,UAAU;YACtB,iBAAiB,EAAE,iBAAiB;YACpC,KAAK,EAAE,KAAK;YAEZ,YAAY;YACZ,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,OAAO;YACnB,SAAS,EAAE,OAAO;YAElB,YAAY;YACZ,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,YAAY;YAE1B,eAAe;YACf,cAAc,EAAE,cAAc;YAC9B,gBAAgB,EAAE,gBAAgB;YAClC,WAAW,EAAE,WAAW;YAExB,cAAc;YACd,QAAQ,EAAE,cAAc;YACxB,wBAAwB,EAAE,iBAAiB;YAC3C,eAAe,EAAE,cAAc;YAE/B,mBAAmB;YACnB,aAAa,EAAE,sBAAsB;YACrC,iBAAiB,EAAE,sBAAsB;YACzC,qBAAqB,EAAE,sBAAsB;YAE7C,mBAAmB;YACnB,cAAc,EAAE,WAAW;YAC3B,eAAe,EAAE,eAAe;YAChC,aAAa,EAAE,aAAa;YAC5B,kBAAkB,EAAE,OAAO;YAE3B,yBAAyB;YACzB,iBAAiB,EAAE,kBAAkB;YACrC,SAAS,EAAE,UAAU;YACrB,sBAAsB,EAAE,UAAU;YAClC,gBAAgB,EAAE,aAAa;YAE/B,sBAAsB;YACtB,mBAAmB,EAAE,mBAAmB;YACxC,oBAAoB,EAAE,oBAAoB;YAC1C,gBAAgB,EAAE,sBAAsB;YACxC,iBAAiB,EAAE,uBAAuB;YAC1C,iBAAiB,EAAE,iBAAiB;YACpC,gBAAgB,EAAE,2BAA2B;YAC7C,QAAQ,EAAE,QAAQ;YAClB,oBAAoB,EAAE,oBAAoB;YAE1C,YAAY;YACZ,qBAAqB,EAAE,sBAAsB;YAC7C,mBAAmB,EAAE,sBAAsB;YAC3C,eAAe,EAAE,sBAAsB;YACvC,kBAAkB,EAAE,kBAAkB;YACtC,yBAAyB,EAAE,yBAAyB;YACpD,iBAAiB,EAAE,iBAAiB;YACpC,aAAa,EAAE,aAAa;YAE5B,cAAc;YACd,gBAAgB,EAAE,SAAS;YAC3B,gBAAgB,EAAE,SAAS;YAC3B,iBAAiB,EAAE,SAAS;YAE5B,iBAAiB;YACjB,gBAAgB,EAAE,mBAAmB;YACrC,YAAY,EAAE,aAAa;YAC3B,qBAAqB,EAAE,UAAU;YAEjC,iBAAiB;YACjB,cAAc,EAAE,SAAS;YACzB,mBAAmB,EAAE,SAAS;YAE9B,eAAe;YACf,YAAY,EAAE,OAAO;YAErB,cAAc;YACd,uBAAuB,EAAE,SAAS;YAClC,SAAS,EAAE,SAAS;YAEpB,cAAc;YACd,sBAAsB,EAAE,gBAAgB;YACxC,gBAAgB,EAAE,gBAAgB;YAElC,cAAc;YACd,wBAAwB,EAAE,mBAAmB;YAC7C,mBAAmB,EAAE,cAAc;SACpC,CAAC;QAEF,wBAAwB;QACxB,MAAM,cAAc,GAAG;YACrB,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,eAAe;YACvB,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,eAAe;YAC1B,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,eAAe;YACzB,QAAQ,EAAE,eAAe;YACzB,QAAQ,EAAE,eAAe;YACzB,YAAY,EAAE,eAAe;YAC7B,MAAM,EAAE,eAAe;YACvB,MAAM,EAAE,eAAe;YACvB,UAAU,EAAE,eAAe;YAC3B,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,iBAAiB;YAC3B,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,aAAa;SACtB,CAAC;QAEF,0BAA0B;QAC1B,MAAM,gBAAgB,GAAG;YACvB,SAAS,EAAE,mBAAmB;YAC9B,UAAU,EAAE,kBAAkB;YAC9B,eAAe,EAAE,gBAAgB;YACjC,cAAc,EAAE,yCAAyC;YACzD,WAAW,EAAE,iBAAiB;YAC9B,cAAc,EAAE,6BAA6B;YAC7C,aAAa,EAAE,MAAM;YACrB,WAAW,EAAE,uBAAuB;YACpC,gBAAgB,EAAE,iBAAiB;SACpC,CAAC;QAEF,mBAAmB;QACnB,MAAM,SAAS,GAAG;YAChB,WAAW,EAAE,oBAAoB;YACjC,YAAY,EAAE,mBAAmB;YACjC,QAAQ,EAAE,kBAAkB;YAC5B,SAAS,EAAE,YAAY;YACvB,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,UAAU;YACxB,QAAQ,EAAE,oBAAoB;SAC/B,CAAC;QAEF,uBAAuB;QACvB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAEzE,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,OAAO;YACL,iBAAiB;YACjB,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE,kBAAkB;YAC5B,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,cAAc;YACvB,aAAa,EAAE,kBAAkB;YACjC,iBAAiB,EAAE,sBAAsB;YACzC,YAAY,EAAE,iBAAiB;YAC/B,iBAAiB,EAAE,sBAAsB;YACzC,gBAAgB,EAAE,qBAAqB;YACvC,WAAW,EAAE,qBAAqB;YAElC,eAAe;YACf,OAAO,EAAE,UAAU;YACnB,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,eAAe;YAC7B,SAAS,EAAE,YAAY;YACvB,aAAa,EAAE,gBAAgB;YAC/B,eAAe,EAAE,gBAAgB;YACjC,mBAAmB,EAAE,sBAAsB;YAC3C,eAAe,EAAE,kBAAkB;YACnC,eAAe,EAAE,kBAAkB;YACnC,YAAY,EAAE,eAAe;YAC7B,WAAW,EAAE,cAAc;YAC3B,UAAU,EAAE,aAAa;YACzB,SAAS,EAAE,YAAY;YACvB,UAAU,EAAE,aAAa;YACzB,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,YAAY;YACvB,aAAa,EAAE,aAAa;YAC5B,YAAY,EAAE,aAAa;YAC3B,YAAY,EAAE,aAAa;YAE3B,kBAAkB;YAClB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,gBAAgB;YAC9B,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,mBAAmB;YAChC,aAAa,EAAE,mBAAmB;YAClC,gBAAgB,EAAE,mBAAmB;YACrC,eAAe,EAAE,mBAAmB;YACpC,QAAQ,EAAE,cAAc;YACxB,cAAc,EAAE,iBAAiB;YACjC,cAAc,EAAE,iBAAiB;YACjC,yBAAyB,EAAE,gBAAgB;YAC3C,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,YAAY;YACtB,cAAc,EAAE,YAAY;YAE5B,wCAAwC;YACxC,UAAU,EAAE,qBAAqB;YACjC,cAAc,EAAE,qBAAqB;YACrC,aAAa,EAAE,8CAA8C;YAC7D,aAAa,EAAE,oBAAoB;YACnC,QAAQ,EAAE,eAAe;YAEzB,+BAA+B;YAC/B,KAAK,EAAE,iBAAiB;YACxB,QAAQ,EAAE,oBAAoB;YAC9B,MAAM,EAAE,oBAAoB;YAC5B,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,gCAAgC;YACzC,KAAK,EAAE,2BAA2B;YAClC,KAAK,EAAE,wBAAwB;SAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,WAAmB;QAC7C,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrF,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,WAAmB;QAC3C,iBAAiB;QACjB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;QAC/C,CAAC;QAED,+BAA+B;QAC/B,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,4DAA4D;QAC5D,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEzC,wCAAwC;YACxC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;YAC/C,CAAC;YAED,4CAA4C;YAC5C,IAAI,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClD,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;YAC5C,CAAC;YAED,8BAA8B;YAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAe,EAAE,IAA2B;QACjE,uBAAuB;QACvB,MAAM,SAAS,GAAG,GAAG,CAAC;QACtB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC/B,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;QACpD,CAAC;QAED,+BAA+B;QAC/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK;gBACR,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,CAAC;YAC7D,KAAK,IAAI;gBACP,OAAO,OAAO,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC;YAC5D;gBACE,OAAO,OAAO,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAI,KAAU,EAAE,SAAiB;QACpD,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,QAA2B;QACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAC/B,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,SAAiB;QAClC,OAAO,SAAS,IAAI,WAAW,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,SAAiB;QAC9B,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export * from './parser.js';
2
+ export * from './react-parser.js';
3
+ export * from './vue-parser.js';
4
+ export * from './svelte-parser.js';
5
+ export * from './vanilla-parser.js';
6
+ export * from './feature-validator.js';
7
+ export * from './parser-manager.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Parser exports
2
+ export * from './parser.js';
3
+ export * from './react-parser.js';
4
+ export * from './vue-parser.js';
5
+ export * from './svelte-parser.js';
6
+ export * from './vanilla-parser.js';
7
+ export * from './feature-validator.js';
8
+ export * from './parser-manager.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,103 @@
1
+ import type { DetectedFeature } from '../types/index.js';
2
+ import { FeatureValidator } from './feature-validator.js';
3
+ /**
4
+ * Parser manager that coordinates all parsers and provides concurrent processing
5
+ * for large codebases with advanced web APIs using lazy loading
6
+ */
7
+ export declare class ParserManager {
8
+ private parsers;
9
+ private readonly validator;
10
+ private readonly maxConcurrency;
11
+ private initialized;
12
+ constructor(maxConcurrency?: number);
13
+ /**
14
+ * Lazy load parsers only when needed
15
+ */
16
+ private ensureParsersLoaded;
17
+ /**
18
+ * Get parser for file type with lazy loading
19
+ */
20
+ private getParserForFile;
21
+ /**
22
+ * Parse multiple files concurrently with error handling
23
+ */
24
+ parseFiles(filePaths: string[]): Promise<DetectedFeature[]>;
25
+ /**
26
+ * Parse a single file with memory optimization
27
+ */
28
+ parseFile(filePath: string): Promise<DetectedFeature[]>;
29
+ /**
30
+ * Parse large files using streaming to reduce memory usage
31
+ */
32
+ private parseFileStreaming;
33
+ /**
34
+ * Check if a file can be parsed by any available parser
35
+ */
36
+ canParseFile(filePath: string): Promise<boolean>;
37
+ /**
38
+ * Get all supported file extensions
39
+ */
40
+ getSupportedExtensions(): Promise<string[]>;
41
+ /**
42
+ * Get parser information for debugging
43
+ */
44
+ getParserInfo(): Promise<Array<{
45
+ name: string;
46
+ extensions: string[];
47
+ }>>;
48
+ /**
49
+ * Filter files by supported extensions
50
+ */
51
+ filterSupportedFiles(filePaths: string[]): Promise<string[]>;
52
+ /**
53
+ * Scan directory for supported files (recursive)
54
+ */
55
+ scanDirectory(directoryPath: string, options?: {
56
+ recursive?: boolean;
57
+ excludePatterns?: string[];
58
+ maxDepth?: number;
59
+ }): Promise<string[]>;
60
+ /**
61
+ * Recursive directory scanning helper
62
+ */
63
+ private scanDirectoryRecursive;
64
+ /**
65
+ * Get processing statistics
66
+ */
67
+ getProcessingStats(filePaths: string[]): Promise<{
68
+ totalFiles: number;
69
+ supportedFiles: number;
70
+ filesByType: Record<string, number>;
71
+ estimatedProcessingTime: number;
72
+ memoryEstimate: string;
73
+ }>;
74
+ /**
75
+ * Get memory and performance statistics
76
+ */
77
+ getStats(): {
78
+ parsersLoaded: number;
79
+ maxConcurrency: number;
80
+ memoryStats: any;
81
+ };
82
+ /**
83
+ * Create batches for concurrent processing
84
+ */
85
+ private createBatches;
86
+ /**
87
+ * Get file extension
88
+ */
89
+ private getFileExtension;
90
+ /**
91
+ * Sleep utility for batch processing
92
+ */
93
+ private sleep;
94
+ /**
95
+ * Get feature validator instance
96
+ */
97
+ getValidator(): FeatureValidator;
98
+ /**
99
+ * Validate features without parsing (for external use)
100
+ */
101
+ validateFeatures(features: DetectedFeature[]): Promise<DetectedFeature[]>;
102
+ }
103
+ //# sourceMappingURL=parser-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-manager.d.ts","sourceRoot":"","sources":["../../src/parsers/parser-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM1D;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,WAAW,CAAS;gBAEhB,cAAc,GAAE,MAAW;IAMvC;;OAEG;YACW,mBAAmB;IA+BjC;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAyCjE;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA4C7D;;OAEG;YACW,kBAAkB;IAwBhC;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYtD;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAUjD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAS7E;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQlE;;OAEG;IACG,aAAa,CACjB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd,GACL,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBpB;;OAEG;YACW,sBAAsB;IAmDpC;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACrD,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,uBAAuB,EAAE,MAAM,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAwBF;;OAEG;IACH,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,GAAG,CAAC;KAClB;IAQD;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,YAAY,IAAI,gBAAgB;IAIhC;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAGhF"}