@@ -101,13 +101,22 @@ const JsxOptionsSchema = v.strictObject({
101101 v . optional ( v . boolean ( ) ) ,
102102 v . description ( 'Toggles whether to throw an error when a tag name uses an XML namespace' ) ,
103103 ) ,
104+ pure : v . pipe (
105+ v . optional ( v . boolean ( ) ) ,
106+ v . description ( 'Mark JSX elements and top-level React method calls as pure for tree shaking.' ) ,
107+ ) ,
104108 importSource : v . pipe (
105109 v . optional ( v . string ( ) ) ,
106110 v . description ( 'Import the factory of element and fragment if mode is classic' ) ,
107111 ) ,
108112 pragma : v . pipe ( v . optional ( v . string ( ) ) , v . description ( 'Jsx element transformation' ) ) ,
109113 pragmaFrag : v . pipe ( v . optional ( v . string ( ) ) , v . description ( 'Jsx fragment transformation' ) ) ,
110- refresh : v . pipe ( v . optional ( v . boolean ( ) ) , v . description ( 'Enable react fast refresh' ) ) ,
114+ refresh : v . pipe (
115+ v . optional ( v . union ( [ v . boolean ( ) , v . any ( ) ] ) ) ,
116+ v . description ( 'Enable react fast refresh' ) ,
117+ ) ,
118+ useBuiltIns : v . pipe ( v . optional ( v . any ( ) ) , v . description ( 'Deprecated' ) ) ,
119+ useSpread : v . pipe ( v . optional ( v . any ( ) ) , v . description ( 'Deprecated' ) ) ,
111120} ) ;
112121
113122const HelperModeSchema = v . union ( [ v . literal ( 'Runtime' ) , v . literal ( 'External' ) ] ) ;
@@ -132,6 +141,7 @@ const TypescriptSchema = v.object({
132141 onlyRemoveTypeImports : v . optional ( v . boolean ( ) ) ,
133142 allowNamespaces : v . optional ( v . boolean ( ) ) ,
134143 allowDeclareFields : v . optional ( v . boolean ( ) ) ,
144+ removeClassFieldsWithoutInitializer : v . optional ( v . boolean ( ) ) ,
135145 declaration : v . optional (
136146 v . object ( {
137147 stripInternal : v . optional ( v . boolean ( ) ) ,
@@ -147,11 +157,17 @@ const AssumptionsSchema = v.object({
147157 pureGetters : v . optional ( v . boolean ( ) ) ,
148158 setPublicClassFields : v . optional ( v . boolean ( ) ) ,
149159} ) ;
160+
161+ const TransformPluginsSchema = v . object ( {
162+ styledComponents : v . optional ( v . any ( ) ) ,
163+ taggedTemplateEscape : v . optional ( v . boolean ( ) ) ,
164+ } ) ;
165+
150166const TransformOptionsSchema = v . object ( {
151167 assumptions : v . optional ( AssumptionsSchema ) ,
152168 typescript : v . optional ( TypescriptSchema ) ,
153169 helpers : v . optional ( HelpersSchema ) ,
154- decorators : v . optional ( DecoratorOptionSchema ) ,
170+ decorator : v . optional ( DecoratorOptionSchema ) ,
155171 jsx : v . optional (
156172 v . union ( [
157173 v . literal ( false ) ,
@@ -177,6 +193,7 @@ const TransformOptionsSchema = v.object({
177193 v . optional ( v . array ( v . string ( ) ) ) ,
178194 v . description ( 'Remove labeled statements with these label names' ) ,
179195 ) ,
196+ plugins : v . pipe ( v . optional ( TransformPluginsSchema ) , v . description ( 'Third-party plugins to use' ) ) ,
180197} ) ;
181198
182199const WatchOptionsSchema = v . strictObject ( {
@@ -296,26 +313,25 @@ const CompressOptionsKeepNamesSchema = v.strictObject({
296313 class : v . boolean ( ) ,
297314} ) ;
298315
316+ const CompressTreeshakeOptionsSchema = v . strictObject ( {
317+ annotations : v . optional ( v . boolean ( ) ) ,
318+ manualPureFunctions : v . optional ( v . array ( v . string ( ) ) ) ,
319+ propertyReadSideEffects : v . optional ( v . union ( [ v . boolean ( ) , v . literal ( 'always' ) ] ) ) ,
320+ unknownGlobalSideEffects : v . optional ( v . boolean ( ) ) ,
321+ invalidImportSideEffects : v . optional ( v . boolean ( ) ) ,
322+ } ) ;
323+
299324const CompressOptionsSchema = v . strictObject ( {
300- target : v . optional (
301- v . union ( [
302- v . literal ( 'esnext' ) ,
303- v . literal ( 'es2015' ) ,
304- v . literal ( 'es2016' ) ,
305- v . literal ( 'es2017' ) ,
306- v . literal ( 'es2018' ) ,
307- v . literal ( 'es2019' ) ,
308- v . literal ( 'es2020' ) ,
309- v . literal ( 'es2021' ) ,
310- v . literal ( 'es2022' ) ,
311- v . literal ( 'es2023' ) ,
312- v . literal ( 'es2024' ) ,
313- ] ) ,
314- ) ,
325+ target : v . optional ( v . union ( [ v . string ( ) , v . array ( v . string ( ) ) ] ) ) ,
315326 dropConsole : v . optional ( v . boolean ( ) ) ,
316327 dropDebugger : v . optional ( v . boolean ( ) ) ,
317328 keepNames : v . optional ( CompressOptionsKeepNamesSchema ) ,
318329 unused : v . optional ( v . union ( [ v . boolean ( ) , v . literal ( 'keep_assign' ) ] ) ) ,
330+ joinVars : v . optional ( v . boolean ( ) ) ,
331+ sequences : v . optional ( v . boolean ( ) ) ,
332+ dropLabels : v . optional ( v . array ( v . string ( ) ) ) ,
333+ maxIterations : v . optional ( v . number ( ) ) ,
334+ treeshake : v . optional ( CompressTreeshakeOptionsSchema ) ,
319335} ) satisfies v . GenericSchema < CompressOptions > ;
320336
321337const MangleOptionsKeepNamesSchema = v . strictObject ( {
@@ -352,22 +368,23 @@ const ResolveOptionsSchema = v.strictObject({
352368 mainFiles : v . optional ( v . array ( v . string ( ) ) ) ,
353369 modules : v . optional ( v . array ( v . string ( ) ) ) ,
354370 symlinks : v . optional ( v . boolean ( ) ) ,
355- yarnPnp : v . optional ( v . boolean ( ) ) ,
371+ tsconfigFilename : v . optional ( v . string ( ) ) ,
356372} ) ;
357373
358- // TODO: moduleSideEffects
359- const TreeshakingOptionsSchema = v . union ( [
360- v . boolean ( ) ,
361- v . looseObject ( {
362- annotations : v . optional ( v . boolean ( ) ) ,
363- manualPureFunctions : v . optional ( v . array ( v . string ( ) ) ) ,
364- unknownGlobalSideEffects : v . optional ( v . boolean ( ) ) ,
365- invalidImportSideEffects : v . optional ( v . boolean ( ) ) ,
366- commonjs : v . optional ( v . boolean ( ) ) ,
367- propertyReadSideEffects : v . optional ( v . union ( [ v . literal ( false ) , v . literal ( 'always' ) ] ) ) ,
368- propertyWriteSideEffects : v . optional ( v . union ( [ v . literal ( false ) , v . literal ( 'always' ) ] ) ) ,
369- } ) ,
370- ] ) ;
374+ const TreeshakingOptionsSchema = v . strictObject ( {
375+ // TODO: stricter typing
376+ moduleSideEffects : v . optional ( v . any ( ) ) ,
377+ annotations : v . optional ( v . boolean ( ) ) ,
378+ // valibot does not infer readonly arrays
379+ manualPureFunctions : v . optional (
380+ v . custom < readonly string [ ] > ( ( input ) => v . is ( v . array ( v . string ( ) ) , input ) , 'string array' ) ,
381+ ) ,
382+ unknownGlobalSideEffects : v . optional ( v . boolean ( ) ) ,
383+ invalidImportSideEffects : v . optional ( v . boolean ( ) ) ,
384+ commonjs : v . optional ( v . boolean ( ) ) ,
385+ propertyReadSideEffects : v . optional ( v . union ( [ v . literal ( false ) , v . literal ( 'always' ) ] ) ) ,
386+ propertyWriteSideEffects : v . optional ( v . union ( [ v . literal ( false ) , v . literal ( 'always' ) ] ) ) ,
387+ } ) ;
371388
372389const OptimizationOptionsSchema = v . strictObject ( {
373390 inlineConst : v . pipe (
@@ -448,7 +465,7 @@ const InputOptionsSchema = v.strictObject({
448465 v . optional ( v . boolean ( ) ) ,
449466 v . description ( 'Create shim variables for missing exports' ) ,
450467 ) ,
451- treeshake : v . optional ( TreeshakingOptionsSchema ) ,
468+ treeshake : v . optional ( v . union ( [ v . boolean ( ) , TreeshakingOptionsSchema ] ) ) ,
452469 optimization : v . optional ( OptimizationOptionsSchema ) ,
453470 logLevel : v . pipe (
454471 v . optional ( LogLevelOptionSchema ) ,
@@ -467,16 +484,13 @@ const InputOptionsSchema = v.strictObject({
467484 ) ,
468485 experimental : v . optional (
469486 v . strictObject ( {
470- enableComposingJsPlugins : v . optional ( v . boolean ( ) ) ,
471487 viteMode : v . optional ( v . boolean ( ) ) ,
472488 resolveNewUrlToAsset : v . optional ( v . boolean ( ) ) ,
473- onDemandWrapping : v . optional ( v . boolean ( ) ) ,
474- incrementalBuild : v . optional ( v . boolean ( ) ) ,
475489 devMode : v . optional ( DevModeSchema ) ,
490+ chunkModulesOrder : v . optional ( v . union ( [ v . literal ( 'module-id' ) , v . literal ( 'exec-order' ) ] ) ) ,
476491 attachDebugInfo : v . optional (
477492 v . union ( [ v . literal ( 'none' ) , v . literal ( 'simple' ) , v . literal ( 'full' ) ] ) ,
478493 ) ,
479- chunkModulesOrder : v . optional ( v . union ( [ v . literal ( 'module-id' ) , v . literal ( 'exec-order' ) ] ) ) ,
480494 chunkImportMap : v . optional (
481495 v . union ( [
482496 v . boolean ( ) ,
@@ -486,6 +500,9 @@ const InputOptionsSchema = v.strictObject({
486500 } ) ,
487501 ] ) ,
488502 ) ,
503+ onDemandWrapping : v . optional ( v . boolean ( ) ) ,
504+ incrementalBuild : v . optional ( v . boolean ( ) ) ,
505+ transformHiresSourcemap : v . optional ( v . union ( [ v . boolean ( ) , v . literal ( 'boundary' ) ] ) ) ,
489506 nativeMagicString : v . optional ( v . boolean ( ) ) ,
490507 chunkOptimization : v . optional ( v . boolean ( ) ) ,
491508 // lazyBarrel: v.optional(v.boolean()),
@@ -514,6 +531,10 @@ const InputOptionsSchema = v.strictObject({
514531 ] ) ,
515532 ) ,
516533 ) ,
534+ context : v . pipe (
535+ v . optional ( v . string ( ) ) ,
536+ v . description ( 'The value of `this` at the top level of each module.' ) ,
537+ ) ,
517538 tsconfig : v . pipe (
518539 v . optional ( v . union ( [ v . boolean ( ) , v . string ( ) ] ) ) ,
519540 v . description ( 'Path to the tsconfig.json file.' ) ,
@@ -650,7 +671,7 @@ const GeneratedCodeOptionsSchema = v.strictObject({
650671 v . optional ( v . boolean ( ) ) ,
651672 v . description ( 'Whether to use Symbol.toStringTag for namespace objects' ) ,
652673 ) ,
653- preset : GeneratedCodePresetSchema ,
674+ preset : v . optional ( GeneratedCodePresetSchema ) ,
654675 profilerNames : v . pipe (
655676 v . optional ( v . boolean ( ) ) ,
656677 v . description ( 'Whether to add readable names to internal variables for profiling purposes' ) ,
0 commit comments