Skip to content

Commit ed9db8a

Browse files
authored
perf: improve treeshake-ability (#33)
1 parent 05b121f commit ed9db8a

File tree

8 files changed

+68
-54
lines changed

8 files changed

+68
-54
lines changed

src/column-tracking.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, test, expect } from 'vitest'
22
import { parse } from './parse'
3-
import { NODE_STYLE_RULE, NODE_DECLARATION, NODE_AT_RULE, NODE_SELECTOR_LIST } from './parse'
3+
import { NODE_STYLE_RULE, NODE_DECLARATION, NODE_AT_RULE, NODE_SELECTOR_LIST } from './constants'
44

55
describe('Column Tracking', () => {
66
test('should track column for single-line CSS', () => {

src/constants.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Central location for all constants - re-exported from arena
2+
// This breaks the barrel file chain and improves tree-shaking
3+
4+
export {
5+
NODE_STYLESHEET,
6+
NODE_STYLE_RULE,
7+
NODE_AT_RULE,
8+
NODE_DECLARATION,
9+
NODE_SELECTOR,
10+
NODE_COMMENT,
11+
NODE_BLOCK,
12+
NODE_VALUE_KEYWORD,
13+
NODE_VALUE_NUMBER,
14+
NODE_VALUE_DIMENSION,
15+
NODE_VALUE_STRING,
16+
NODE_VALUE_COLOR,
17+
NODE_VALUE_FUNCTION,
18+
NODE_VALUE_OPERATOR,
19+
NODE_VALUE_PARENTHESIS,
20+
NODE_SELECTOR_LIST,
21+
NODE_SELECTOR_TYPE,
22+
NODE_SELECTOR_CLASS,
23+
NODE_SELECTOR_ID,
24+
NODE_SELECTOR_ATTRIBUTE,
25+
NODE_SELECTOR_PSEUDO_CLASS,
26+
NODE_SELECTOR_PSEUDO_ELEMENT,
27+
NODE_SELECTOR_COMBINATOR,
28+
NODE_SELECTOR_UNIVERSAL,
29+
NODE_SELECTOR_NESTING,
30+
NODE_SELECTOR_NTH,
31+
NODE_SELECTOR_NTH_OF,
32+
NODE_SELECTOR_LANG,
33+
NODE_PRELUDE_MEDIA_QUERY,
34+
NODE_PRELUDE_MEDIA_FEATURE,
35+
NODE_PRELUDE_MEDIA_TYPE,
36+
NODE_PRELUDE_CONTAINER_QUERY,
37+
NODE_PRELUDE_SUPPORTS_QUERY,
38+
NODE_PRELUDE_LAYER_NAME,
39+
NODE_PRELUDE_IDENTIFIER,
40+
NODE_PRELUDE_OPERATOR,
41+
NODE_PRELUDE_IMPORT_URL,
42+
NODE_PRELUDE_IMPORT_LAYER,
43+
NODE_PRELUDE_IMPORT_SUPPORTS,
44+
FLAG_IMPORTANT,
45+
ATTR_OPERATOR_NONE,
46+
ATTR_OPERATOR_EQUAL,
47+
ATTR_OPERATOR_TILDE_EQUAL,
48+
ATTR_OPERATOR_PIPE_EQUAL,
49+
ATTR_OPERATOR_CARET_EQUAL,
50+
ATTR_OPERATOR_DOLLAR_EQUAL,
51+
ATTR_OPERATOR_STAR_EQUAL,
52+
ATTR_FLAG_NONE,
53+
ATTR_FLAG_CASE_INSENSITIVE,
54+
ATTR_FLAG_CASE_SENSITIVE,
55+
} from './arena'

src/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ export {
2828
ATTR_FLAG_CASE_SENSITIVE,
2929
} from './arena'
3030

31-
// Constants
31+
// Constants - imported from dedicated constants file
32+
// This improves tree-shaking by avoiding the parse module if only constants are needed
3233
export {
3334
NODE_STYLE_RULE,
3435
NODE_AT_RULE,
@@ -69,7 +70,7 @@ export {
6970
NODE_PRELUDE_IMPORT_LAYER,
7071
NODE_PRELUDE_IMPORT_SUPPORTS,
7172
FLAG_IMPORTANT,
72-
} from './parse'
73+
} from './constants'
7374
export {
7475
TOKEN_IDENT,
7576
TOKEN_FUNCTION,

src/parse.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, test, expect } from 'vitest'
2+
import { Parser, parse } from './parse'
23
import {
3-
Parser,
44
NODE_STYLESHEET,
55
NODE_STYLE_RULE,
66
NODE_AT_RULE,
@@ -12,8 +12,7 @@ import {
1212
NODE_SELECTOR_TYPE,
1313
NODE_SELECTOR_ATTRIBUTE,
1414
NODE_SELECTOR_NESTING,
15-
parse,
16-
} from './parse'
15+
} from './constants'
1716
import { ATTR_OPERATOR_PIPE_EQUAL } from './arena'
1817

1918
describe('Parser', () => {

src/parse.ts

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -574,47 +574,3 @@ export function parse(source: string, options?: ParserOptions): CSSNode {
574574
const parser = new Parser(source, options)
575575
return parser.parse()
576576
}
577-
578-
// Re-export node type constants so consumers don't need to import from arena
579-
export {
580-
NODE_STYLESHEET,
581-
NODE_STYLE_RULE,
582-
NODE_AT_RULE,
583-
NODE_DECLARATION,
584-
NODE_SELECTOR,
585-
NODE_COMMENT,
586-
NODE_BLOCK,
587-
NODE_VALUE_KEYWORD,
588-
NODE_VALUE_NUMBER,
589-
NODE_VALUE_DIMENSION,
590-
NODE_VALUE_STRING,
591-
NODE_VALUE_COLOR,
592-
NODE_VALUE_FUNCTION,
593-
NODE_VALUE_OPERATOR,
594-
NODE_VALUE_PARENTHESIS,
595-
NODE_SELECTOR_LIST,
596-
NODE_SELECTOR_TYPE,
597-
NODE_SELECTOR_CLASS,
598-
NODE_SELECTOR_ID,
599-
NODE_SELECTOR_ATTRIBUTE,
600-
NODE_SELECTOR_PSEUDO_CLASS,
601-
NODE_SELECTOR_PSEUDO_ELEMENT,
602-
NODE_SELECTOR_COMBINATOR,
603-
NODE_SELECTOR_UNIVERSAL,
604-
NODE_SELECTOR_NESTING,
605-
NODE_SELECTOR_NTH,
606-
NODE_SELECTOR_NTH_OF,
607-
NODE_SELECTOR_LANG,
608-
NODE_PRELUDE_MEDIA_QUERY,
609-
NODE_PRELUDE_MEDIA_FEATURE,
610-
NODE_PRELUDE_MEDIA_TYPE,
611-
NODE_PRELUDE_CONTAINER_QUERY,
612-
NODE_PRELUDE_SUPPORTS_QUERY,
613-
NODE_PRELUDE_LAYER_NAME,
614-
NODE_PRELUDE_IDENTIFIER,
615-
NODE_PRELUDE_OPERATOR,
616-
NODE_PRELUDE_IMPORT_URL,
617-
NODE_PRELUDE_IMPORT_LAYER,
618-
NODE_PRELUDE_IMPORT_SUPPORTS,
619-
FLAG_IMPORTANT,
620-
} from './arena'

src/walk.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, it, expect } from 'vitest'
2+
import { Parser } from './parse'
23
import {
3-
Parser,
44
NODE_STYLESHEET,
55
NODE_STYLE_RULE,
66
NODE_SELECTOR_LIST,
@@ -10,7 +10,7 @@ import {
1010
NODE_VALUE_KEYWORD,
1111
NODE_VALUE_NUMBER,
1212
NODE_VALUE_DIMENSION,
13-
} from './parse'
13+
} from './constants'
1414
import { walk, traverse } from './walk'
1515

1616
describe('walk', () => {

tsconfig.build.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
"declaration": true,
55
"emitDeclarationOnly": true,
66
"noEmit": false,
7-
"outDir": "./dist"
7+
"outDir": "./dist",
8+
"rootDir": "./src"
89
},
10+
"include": ["src/**/*.ts"],
911
"exclude": ["node_modules", "dist", "**/*.test.ts", "benchmark"]
1012
}

vite.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ export default defineConfig({
1818
minify: false,
1919
rollupOptions: {
2020
output: {
21-
preserveModules: false,
21+
preserveModules: true,
2222
entryFileNames: '[name].js',
23+
sourcemap: false,
2324
},
2425
},
2526
},

0 commit comments

Comments
 (0)