@@ -2,7 +2,7 @@ import { parseSync, type Node } from 'oxc-parser';
22import { walk } from 'oxc-walker' ;
33import MagicString from 'magic-string' ;
44import { type Evaluator , type StrictOptions } from '@linaria/babel-preset' ;
5- import shakerEvaluator from '@linaria/shaker' ;
5+ import _shaker from '@linaria/shaker' ;
66import {
77 resolveStyleRulesForSlots ,
88 resolveResetStyleRules ,
@@ -17,6 +17,8 @@ import { batchEvaluator } from './evaluation/batchEvaluator.mjs';
1717import { dedupeCSSRules } from './utils/dedupeCSSRules.mjs' ;
1818import type { StyleCall } from './types.mjs' ;
1919
20+ const shakerEvaluator = ( _shaker . default || _shaker ) as unknown as Evaluator ;
21+
2022export type TransformOptions = {
2123 filename : string ;
2224
@@ -143,31 +145,30 @@ function concatCSSRulesByBucket(bucketA: CSSRulesByBucket = {}, bucketB: CSSRule
143145 * Transforms passed source code with oxc-parser and oxc-walker instead of Babel.
144146 */
145147export function transformSync ( sourceCode : string , options : TransformOptions ) : TransformResult {
146- if ( ! options . filename ) {
148+ const {
149+ babelOptions = { } ,
150+ filename,
151+ classNameHashSalt = '' ,
152+ generateMetadata = false ,
153+ modules = [ '@griffel/core' , '@griffel/react' , '@fluentui/react-components' ] ,
154+ evaluationRules = [
155+ { action : shakerEvaluator } ,
156+ {
157+ test : / [ / \\ ] n o d e _ m o d u l e s [ / \\ ] / ,
158+ action : 'ignore' ,
159+ } ,
160+ ] ,
161+ } = options ;
162+
163+ if ( ! filename ) {
147164 throw new Error ( 'Transform error: "filename" option is required' ) ;
148165 }
149166
150- const evaluationRules : NonNullable < StrictOptions [ 'rules' ] > = [
151- // TODO: why TS error there?!
152- { action : shakerEvaluator as unknown as Evaluator } ,
153- {
154- test : / [ / \\ ] n o d e _ m o d u l e s [ / \\ ] / ,
155- action : 'ignore' ,
156- } ,
157- ] ;
158- const transformOptions : Required < TransformOptions > = {
159- babelOptions : { } ,
160- classNameHashSalt : '' ,
161- generateMetadata : false ,
162- modules : [ '@griffel/core' , '@griffel/react' , '@fluentui/react-components' ] ,
163- evaluationRules,
164- ...options ,
165- } ;
166-
167- const parseResult = parseSync ( options . filename , sourceCode ) ;
167+ const parseResult = parseSync ( filename , sourceCode ) ;
168+ parseResult . module . staticImports ; // TODO use it over imports collected manually
168169
169170 if ( parseResult . errors . length > 0 ) {
170- throw new Error ( `Failed to parse "${ options . filename } ": ${ parseResult . errors . map ( e => e . message ) . join ( ', ' ) } ` ) ;
171+ throw new Error ( `Failed to parse "${ filename } ": ${ parseResult . errors . map ( e => e . message ) . join ( ', ' ) } ` ) ;
171172 }
172173
173174 const magicString = new MagicString ( sourceCode ) ;
@@ -189,7 +190,7 @@ export function transformSync(sourceCode: string, options: TransformOptions): Tr
189190 if ( node . type === 'ImportDeclaration' ) {
190191 const moduleSource = node . source . value ;
191192
192- if ( transformOptions . modules . includes ( moduleSource ) ) {
193+ if ( modules . includes ( moduleSource ) ) {
193194 const specifiers = node . specifiers . reduce <
194195 {
195196 imported : string ;
@@ -309,10 +310,10 @@ export function transformSync(sourceCode: string, options: TransformOptions): Tr
309310 // Process style calls - evaluate and transform
310311 const { evaluationResults, usedVMForEvaluation } = batchEvaluator (
311312 sourceCode ,
312- options . filename ,
313+ filename ,
313314 styleCalls ,
314- transformOptions . babelOptions ,
315- transformOptions . evaluationRules ,
315+ babelOptions ,
316+ evaluationRules ,
316317 ) ;
317318
318319 for ( let i = 0 ; i < styleCalls . length ; i ++ ) {
@@ -324,13 +325,10 @@ export function transformSync(sourceCode: string, options: TransformOptions): Tr
324325 {
325326 const stylesBySlots = evaluationResult as Record < string , GriffelStyle > ;
326327 // TODO fix naming
327- const [ classnamesMapping , cssRulesByBucketA ] = resolveStyleRulesForSlots (
328- stylesBySlots ,
329- transformOptions . classNameHashSalt ,
330- ) ;
328+ const [ classnamesMapping , cssRulesByBucketA ] = resolveStyleRulesForSlots ( stylesBySlots , classNameHashSalt ) ;
331329 const uniqueCSSRules = dedupeCSSRules ( cssRulesByBucket ) ;
332330
333- if ( transformOptions . generateMetadata ) {
331+ if ( generateMetadata ) {
334332 buildCSSEntriesMetadata ( cssEntries , classnamesMapping , uniqueCSSRules , styleCall . declaratorId ) ;
335333 }
336334
@@ -344,12 +342,9 @@ export function transformSync(sourceCode: string, options: TransformOptions): Tr
344342 case 'makeResetStyles' :
345343 {
346344 const styles = evaluationResult as GriffelResetStyle ;
347- const [ ltrClassName , rtlClassName , cssRules ] = resolveResetStyleRules (
348- styles ,
349- transformOptions . classNameHashSalt ,
350- ) ;
345+ const [ ltrClassName , rtlClassName , cssRules ] = resolveResetStyleRules ( styles , classNameHashSalt ) ;
351346
352- if ( transformOptions . generateMetadata ) {
347+ if ( generateMetadata ) {
353348 buildCSSResetEntriesMetadata ( cssResetEntries , cssRules , styleCall . declaratorId ) ;
354349 }
355350
0 commit comments