@weerachai06/tw-scanner 1.0.3 → 1.0.4

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/dist/extractor.js CHANGED
@@ -210,6 +210,33 @@ function walk(node, file, source, results, visited = new WeakSet()) {
210
210
  }
211
211
  }
212
212
  }
213
+ // ─── CSS @apply extractor ─────────────────────────────────────────────────────
214
+ export function extractClassesFromCss(file) {
215
+ if (!fs.existsSync(file))
216
+ return [];
217
+ const source = fs.readFileSync(file, 'utf8');
218
+ const results = [];
219
+ const lines = source.split('\n');
220
+ for (let i = 0; i < lines.length; i++) {
221
+ const line = lines[i];
222
+ const match = line.match(/^\s*@apply\s+(.+?)\s*;/);
223
+ if (!match)
224
+ continue;
225
+ const classStr = match[1];
226
+ const col = line.indexOf('@apply');
227
+ classStr.split(/\s+/).filter(Boolean).forEach((cls) => {
228
+ results.push({
229
+ value: cls,
230
+ file,
231
+ line: i + 1,
232
+ col,
233
+ isDynamic: false,
234
+ context: line.trim(),
235
+ });
236
+ });
237
+ }
238
+ return results;
239
+ }
213
240
  // ─── Public API ───────────────────────────────────────────────────────────────
214
241
  export function extractClassesFromFile(file) {
215
242
  if (!fs.existsSync(file))
package/dist/scanner.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { globSync } from 'glob';
2
2
  import * as path from 'path';
3
- import { extractClassesFromFile } from './extractor.js';
3
+ import { extractClassesFromFile, extractClassesFromCss } from './extractor.js';
4
4
  import { loadTailwindContext, validateBatch } from './validator.js';
5
- const DEFAULT_INCLUDE = ['**/*.{ts,tsx,js,jsx}'];
5
+ const DEFAULT_INCLUDE = ['**/*.{ts,tsx,js,jsx,css}'];
6
6
  const DEFAULT_EXCLUDE = [
7
7
  '**/node_modules/**',
8
8
  '**/dist/**',
@@ -31,7 +31,9 @@ export async function scan(opts) {
31
31
  // ── 3. Extract classes from all files ─────────────────────────────────────
32
32
  const allExtracted = [];
33
33
  for (const file of files) {
34
- const extracted = extractClassesFromFile(file);
34
+ const extracted = file.endsWith('.css')
35
+ ? extractClassesFromCss(file)
36
+ : extractClassesFromFile(file);
35
37
  allExtracted.push(...extracted);
36
38
  }
37
39
  // ── 4. Separate static vs dynamic ─────────────────────────────────────────
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weerachai06/tw-scanner",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "AST-based Tailwind v4 class validator for React projects",
5
5
  "type": "module",
6
6
  "bin": {