Skip to content

Commit 0b17522

Browse files
authored
feat: export NODE_TYPES (#67)
closes #62
1 parent 7c4fece commit 0b17522

File tree

3 files changed

+124
-1
lines changed

3 files changed

+124
-1
lines changed

src/api.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,3 +1221,29 @@ describe('CSSNode', () => {
12211221
})
12221222
})
12231223
})
1224+
1225+
describe('NODE_TYPES namespace', () => {
1226+
test('should work as alternative to individual imports', async () => {
1227+
// Import namespace object
1228+
const { NODE_TYPES } = await import('./constants')
1229+
1230+
const ast = parse('body { color: red; }', { parse_values: false })
1231+
1232+
// Use namespace for type checks
1233+
expect(ast.type).toBe(NODE_TYPES.STYLESHEET)
1234+
expect(ast.first_child!.type).toBe(NODE_TYPES.STYLE_RULE)
1235+
expect(ast.first_child!.first_child!.type).toBe(NODE_TYPES.SELECTOR_LIST)
1236+
expect(ast.first_child!.block!.type).toBe(NODE_TYPES.BLOCK)
1237+
expect(ast.first_child!.block!.first_child!.type).toBe(NODE_TYPES.DECLARATION)
1238+
})
1239+
1240+
test('namespace values should match individual constants', async () => {
1241+
const { NODE_TYPES } = await import('./constants')
1242+
1243+
// Verify they're the same values
1244+
expect(NODE_TYPES.STYLE_RULE).toBe(STYLE_RULE)
1245+
expect(NODE_TYPES.DECLARATION).toBe(DECLARATION)
1246+
expect(NODE_TYPES.AT_RULE).toBe(AT_RULE)
1247+
expect(NODE_TYPES.SELECTOR_LIST).toBe(SELECTOR_LIST)
1248+
})
1249+
})

src/constants.ts

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Central location for all constants - re-exported from arena
22
// This breaks the barrel file chain and improves tree-shaking
33

4-
export {
4+
import {
55
STYLESHEET,
66
STYLE_RULE,
77
AT_RULE,
@@ -50,3 +50,97 @@ export {
5050
ATTR_FLAG_CASE_INSENSITIVE,
5151
ATTR_FLAG_CASE_SENSITIVE,
5252
} from './arena'
53+
54+
export {
55+
STYLESHEET,
56+
STYLE_RULE,
57+
AT_RULE,
58+
DECLARATION,
59+
SELECTOR,
60+
COMMENT,
61+
BLOCK,
62+
IDENTIFIER,
63+
NUMBER,
64+
DIMENSION,
65+
STRING,
66+
HASH,
67+
FUNCTION,
68+
OPERATOR,
69+
PARENTHESIS,
70+
URL,
71+
SELECTOR_LIST,
72+
TYPE_SELECTOR,
73+
CLASS_SELECTOR,
74+
ID_SELECTOR,
75+
ATTRIBUTE_SELECTOR,
76+
PSEUDO_CLASS_SELECTOR,
77+
PSEUDO_ELEMENT_SELECTOR,
78+
COMBINATOR,
79+
UNIVERSAL_SELECTOR,
80+
NESTING_SELECTOR,
81+
NTH_SELECTOR,
82+
NTH_OF_SELECTOR,
83+
LANG_SELECTOR,
84+
MEDIA_QUERY,
85+
MEDIA_FEATURE,
86+
MEDIA_TYPE,
87+
CONTAINER_QUERY,
88+
SUPPORTS_QUERY,
89+
LAYER_NAME,
90+
PRELUDE_OPERATOR,
91+
FLAG_IMPORTANT,
92+
ATTR_OPERATOR_NONE,
93+
ATTR_OPERATOR_EQUAL,
94+
ATTR_OPERATOR_TILDE_EQUAL,
95+
ATTR_OPERATOR_PIPE_EQUAL,
96+
ATTR_OPERATOR_CARET_EQUAL,
97+
ATTR_OPERATOR_DOLLAR_EQUAL,
98+
ATTR_OPERATOR_STAR_EQUAL,
99+
ATTR_FLAG_NONE,
100+
ATTR_FLAG_CASE_INSENSITIVE,
101+
ATTR_FLAG_CASE_SENSITIVE,
102+
}
103+
104+
// Namespace object for convenient importing
105+
export const NODE_TYPES = {
106+
// Core nodes
107+
STYLESHEET,
108+
STYLE_RULE,
109+
AT_RULE,
110+
DECLARATION,
111+
SELECTOR,
112+
COMMENT,
113+
BLOCK,
114+
// Value nodes
115+
IDENTIFIER,
116+
NUMBER,
117+
DIMENSION,
118+
STRING,
119+
HASH,
120+
FUNCTION,
121+
OPERATOR,
122+
PARENTHESIS,
123+
URL,
124+
// Selector nodes
125+
SELECTOR_LIST,
126+
TYPE_SELECTOR,
127+
CLASS_SELECTOR,
128+
ID_SELECTOR,
129+
ATTRIBUTE_SELECTOR,
130+
PSEUDO_CLASS_SELECTOR,
131+
PSEUDO_ELEMENT_SELECTOR,
132+
COMBINATOR,
133+
UNIVERSAL_SELECTOR,
134+
NESTING_SELECTOR,
135+
NTH_SELECTOR,
136+
NTH_OF_SELECTOR,
137+
LANG_SELECTOR,
138+
// At-rule prelude nodes
139+
MEDIA_QUERY,
140+
MEDIA_FEATURE,
141+
MEDIA_TYPE,
142+
CONTAINER_QUERY,
143+
SUPPORTS_QUERY,
144+
LAYER_NAME,
145+
PRELUDE_OPERATOR,
146+
} as const

src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,6 @@ export {
3232
// This improves tree-shaking by avoiding the parse module if only constants are needed
3333
export * from './constants'
3434
export * from './token-types'
35+
36+
// Namespace object exports for convenience
37+
export { NODE_TYPES } from './constants'

0 commit comments

Comments
 (0)