tailwindcss 4.0.0-alpha.6 → 4.0.0-alpha.8

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/lib.d.mts CHANGED
@@ -1,51 +1,3 @@
1
- interface ClassMetadata {
2
- modifiers: string[];
3
- }
4
- type ClassEntry = [string, ClassMetadata];
5
- interface SelectorOptions {
6
- modifier?: string;
7
- value?: string;
8
- }
9
- interface VariantEntry {
10
- name: string;
11
- isArbitrary: boolean;
12
- values: string[];
13
- hasDash: boolean;
14
- selectors: (options: SelectorOptions) => string[];
15
- }
16
-
17
- declare class Theme {
18
- private values;
19
- constructor(values?: Map<string, string>);
20
- add(key: string, value: string): void;
21
- keysInNamespaces(themeKeys: ThemeKey[]): string[];
22
- get(themeKeys: ThemeKey[]): string | null;
23
- entries(): IterableIterator<[string, string]>;
24
- clearNamespace(namespace: string): void;
25
- resolveKey(candidateValue: string, themeKeys: ThemeKey[]): string | null;
26
- resolve(candidateValue: string, themeKeys: ThemeKey[]): string | null;
27
- resolveWith(candidateValue: string, themeKeys: ThemeKey[], nestedKeys?: `--${string}`[]): [string, Record<string, string>] | null;
28
- namespace(namespace: string): Map<string | null, string>;
29
- }
30
- type ThemeKey = '--accent-color' | '--animate' | '--aspect-ratio' | '--backdrop-blur' | '--backdrop-brightness' | '--backdrop-contrast' | '--backdrop-grayscale' | '--backdrop-hue-rotate' | '--backdrop-invert' | '--backdrop-opacity' | '--backdrop-saturate' | '--backdrop-sepia' | '--background-color' | '--background-image' | '--blur' | '--border-color' | '--border-spacing' | '--border-width' | '--box-shadow-color' | '--breakpoint' | '--brightness' | '--caret-color' | '--color' | '--columns' | '--contrast' | '--cursor' | '--default-border-width' | '--default-ring-color' | '--default-ring-width' | '--divide-width' | '--divide-color' | '--drop-shadow' | '--fill' | '--flex-basis' | '--font-family' | '--font-size' | '--font-weight' | '--gap' | '--gradient-color-stop-positions' | '--grayscale' | '--grid-auto-columns' | '--grid-auto-rows' | '--grid-column' | '--grid-column-end' | '--grid-column-start' | '--grid-row' | '--grid-row-end' | '--grid-row-start' | '--grid-template-columns' | '--grid-template-rows' | '--height' | '--hue-rotate' | '--inset' | '--inset-shadow' | '--invert' | '--letter-spacing' | '--line-height' | '--line-clamp' | '--list-style-image' | '--list-style-type' | '--margin' | '--max-height' | '--max-width' | '--min-height' | '--min-width' | '--object-position' | '--opacity' | '--order' | '--outline-color' | '--outline-width' | '--outline-offset' | '--padding' | '--placeholder-color' | '--radius' | '--ring-color' | '--ring-offset-color' | '--ring-offset-width' | '--ring-width' | '--rotate' | '--saturate' | '--scale' | '--scroll-margin' | '--scroll-padding' | '--sepia' | '--shadow' | '--size' | '--skew' | '--space' | '--spacing' | '--stroke' | '--stroke-width' | '--text-color' | '--text-decoration-color' | '--text-decoration-thickness' | '--text-indent' | '--text-underline-offset' | '--transform-origin' | '--transition-delay' | '--transition-duration' | '--transition-property' | '--transition-timing-function' | '--translate' | '--width' | '--z-index';
31
-
32
- type Rule = {
33
- kind: 'rule';
34
- selector: string;
35
- nodes: AstNode[];
36
- };
37
- type Declaration = {
38
- kind: 'declaration';
39
- property: string;
40
- value: string;
41
- important: boolean;
42
- };
43
- type Comment = {
44
- kind: 'comment';
45
- value: string;
46
- };
47
- type AstNode = Rule | Declaration | Comment;
48
-
49
1
  type ArbitraryUtilityValue = {
50
2
  kind: 'arbitrary';
51
3
  /**
@@ -220,37 +172,40 @@ type Candidate =
220
172
  negative: boolean;
221
173
  important: boolean;
222
174
  };
175
+ declare function parseCandidate(input: string, designSystem: DesignSystem): Candidate | null;
176
+ declare function parseVariant(variant: string, designSystem: DesignSystem): Variant | null;
223
177
 
224
- type CompileFn<T extends Candidate['kind']> = (value: Extract<Candidate, {
225
- kind: T;
226
- }>) => AstNode[] | undefined;
227
- interface SuggestionGroup {
228
- supportsNegative?: boolean;
229
- values: (string | null)[];
230
- modifiers: string[];
231
- }
232
- declare class Utilities {
233
- private utilities;
234
- private completions;
235
- static(name: string, compileFn: CompileFn<'static'>): void;
236
- functional(name: string, compileFn: CompileFn<'functional'>): void;
237
- arbitrary(compileFn: CompileFn<'arbitrary'>): void;
238
- has(name: string): boolean;
239
- get(name: string | symbol): {
240
- kind: "arbitrary" | "static" | "functional";
241
- compileFn: CompileFn<any>;
242
- } | undefined;
243
- kind(name: string): "arbitrary" | "static" | "functional";
244
- getCompletions(name: string): SuggestionGroup[];
245
- suggest(name: string, groups: () => SuggestionGroup[]): void;
246
- keys(): IterableIterator<string | symbol>;
247
- entries(): IterableIterator<[string | symbol, {
248
- kind: "arbitrary" | "static" | "functional";
249
- compileFn: CompileFn<any>;
250
- }]>;
251
- getArbitrary(): CompileFn<any>;
252
- private set;
178
+ type Rule = {
179
+ kind: 'rule';
180
+ selector: string;
181
+ nodes: AstNode[];
182
+ };
183
+ type Declaration = {
184
+ kind: 'declaration';
185
+ property: string;
186
+ value: string;
187
+ important: boolean;
188
+ };
189
+ type Comment = {
190
+ kind: 'comment';
191
+ value: string;
192
+ };
193
+ type AstNode = Rule | Declaration | Comment;
194
+
195
+ declare class Theme {
196
+ private values;
197
+ constructor(values?: Map<string, string>);
198
+ add(key: string, value: string): void;
199
+ keysInNamespaces(themeKeys: ThemeKey[]): string[];
200
+ get(themeKeys: ThemeKey[]): string | null;
201
+ entries(): IterableIterator<[string, string]>;
202
+ clearNamespace(namespace: string): void;
203
+ resolveKey(candidateValue: string, themeKeys: ThemeKey[]): string | null;
204
+ resolve(candidateValue: string, themeKeys: ThemeKey[]): string | null;
205
+ resolveWith(candidateValue: string, themeKeys: ThemeKey[], nestedKeys?: `--${string}`[]): [string, Record<string, string>] | null;
206
+ namespace(namespace: string): Map<string | null, string>;
253
207
  }
208
+ type ThemeKey = '--accent-color' | '--animate' | '--aspect-ratio' | '--backdrop-blur' | '--backdrop-brightness' | '--backdrop-contrast' | '--backdrop-grayscale' | '--backdrop-hue-rotate' | '--backdrop-invert' | '--backdrop-opacity' | '--backdrop-saturate' | '--backdrop-sepia' | '--background-color' | '--background-image' | '--blur' | '--border-color' | '--border-spacing' | '--border-width' | '--box-shadow-color' | '--breakpoint' | '--brightness' | '--caret-color' | '--color' | '--columns' | '--contrast' | '--cursor' | '--default-border-width' | '--default-ring-color' | '--default-ring-width' | '--divide-width' | '--divide-color' | '--drop-shadow' | '--fill' | '--flex-basis' | '--font-family' | '--font-size' | '--font-weight' | '--gap' | '--gradient-color-stop-positions' | '--grayscale' | '--grid-auto-columns' | '--grid-auto-rows' | '--grid-column' | '--grid-column-end' | '--grid-column-start' | '--grid-row' | '--grid-row-end' | '--grid-row-start' | '--grid-template-columns' | '--grid-template-rows' | '--height' | '--hue-rotate' | '--inset' | '--inset-shadow' | '--invert' | '--letter-spacing' | '--line-height' | '--line-clamp' | '--list-style-image' | '--list-style-type' | '--margin' | '--max-height' | '--max-width' | '--min-height' | '--min-width' | '--object-position' | '--opacity' | '--order' | '--outline-color' | '--outline-width' | '--outline-offset' | '--padding' | '--placeholder-color' | '--radius' | '--ring-color' | '--ring-offset-color' | '--ring-offset-width' | '--ring-width' | '--rotate' | '--saturate' | '--scale' | '--scroll-margin' | '--scroll-padding' | '--sepia' | '--shadow' | '--size' | '--skew' | '--space' | '--spacing' | '--stroke' | '--stroke-width' | '--text-color' | '--text-decoration-color' | '--text-decoration-thickness' | '--text-indent' | '--text-underline-offset' | '--transform-origin' | '--transition-delay' | '--transition-duration' | '--transition-property' | '--transition-timing-function' | '--translate' | '--width' | '--z-index';
254
209
 
255
210
  type VariantFn<T extends Variant['kind']> = (rule: Rule, variant: Extract<Variant, {
256
211
  kind: T;
@@ -304,6 +259,58 @@ declare class Variants {
304
259
  private nextOrder;
305
260
  }
306
261
 
262
+ declare function compileAstNodes(rawCandidate: string, designSystem: DesignSystem): {
263
+ node: Rule;
264
+ propertySort: number[];
265
+ } | null;
266
+
267
+ interface ClassMetadata {
268
+ modifiers: string[];
269
+ }
270
+ type ClassEntry = [string, ClassMetadata];
271
+ interface SelectorOptions {
272
+ modifier?: string;
273
+ value?: string;
274
+ }
275
+ interface VariantEntry {
276
+ name: string;
277
+ isArbitrary: boolean;
278
+ values: string[];
279
+ hasDash: boolean;
280
+ selectors: (options: SelectorOptions) => string[];
281
+ }
282
+
283
+ type CompileFn<T extends Candidate['kind']> = (value: Extract<Candidate, {
284
+ kind: T;
285
+ }>) => AstNode[] | undefined;
286
+ interface SuggestionGroup {
287
+ supportsNegative?: boolean;
288
+ values: (string | null)[];
289
+ modifiers: string[];
290
+ }
291
+ declare class Utilities {
292
+ private utilities;
293
+ private completions;
294
+ static(name: string, compileFn: CompileFn<'static'>): void;
295
+ functional(name: string, compileFn: CompileFn<'functional'>): void;
296
+ arbitrary(compileFn: CompileFn<'arbitrary'>): void;
297
+ has(name: string): boolean;
298
+ get(name: string | symbol): {
299
+ kind: "arbitrary" | "static" | "functional";
300
+ compileFn: CompileFn<any>;
301
+ } | undefined;
302
+ kind(name: string): "arbitrary" | "static" | "functional";
303
+ getCompletions(name: string): SuggestionGroup[];
304
+ suggest(name: string, groups: () => SuggestionGroup[]): void;
305
+ keys(): IterableIterator<string | symbol>;
306
+ entries(): IterableIterator<[string | symbol, {
307
+ kind: "arbitrary" | "static" | "functional";
308
+ compileFn: CompileFn<any>;
309
+ }]>;
310
+ getArbitrary(): CompileFn<any>;
311
+ private set;
312
+ }
313
+
307
314
  type DesignSystem = {
308
315
  theme: Theme;
309
316
  utilities: Utilities;
@@ -312,9 +319,15 @@ type DesignSystem = {
312
319
  getClassOrder(classes: string[]): [string, bigint | null][];
313
320
  getClassList(): ClassEntry[];
314
321
  getVariants(): VariantEntry[];
322
+ parseCandidate(candidate: string): ReturnType<typeof parseCandidate>;
323
+ parseVariant(variant: string): ReturnType<typeof parseVariant>;
324
+ compileAstNodes(candidate: string): ReturnType<typeof compileAstNodes>;
325
+ getUsedVariants(): ReturnType<typeof parseVariant>[];
315
326
  };
316
327
 
317
- declare function compile(css: string, rawCandidates: string[]): string;
328
+ declare function compile(css: string): {
329
+ build(candidates: string[]): string;
330
+ };
318
331
  declare function optimizeCss(input: string, { file, minify }?: {
319
332
  file?: string;
320
333
  minify?: boolean;
package/dist/lib.d.ts CHANGED
@@ -1,51 +1,3 @@
1
- interface ClassMetadata {
2
- modifiers: string[];
3
- }
4
- type ClassEntry = [string, ClassMetadata];
5
- interface SelectorOptions {
6
- modifier?: string;
7
- value?: string;
8
- }
9
- interface VariantEntry {
10
- name: string;
11
- isArbitrary: boolean;
12
- values: string[];
13
- hasDash: boolean;
14
- selectors: (options: SelectorOptions) => string[];
15
- }
16
-
17
- declare class Theme {
18
- private values;
19
- constructor(values?: Map<string, string>);
20
- add(key: string, value: string): void;
21
- keysInNamespaces(themeKeys: ThemeKey[]): string[];
22
- get(themeKeys: ThemeKey[]): string | null;
23
- entries(): IterableIterator<[string, string]>;
24
- clearNamespace(namespace: string): void;
25
- resolveKey(candidateValue: string, themeKeys: ThemeKey[]): string | null;
26
- resolve(candidateValue: string, themeKeys: ThemeKey[]): string | null;
27
- resolveWith(candidateValue: string, themeKeys: ThemeKey[], nestedKeys?: `--${string}`[]): [string, Record<string, string>] | null;
28
- namespace(namespace: string): Map<string | null, string>;
29
- }
30
- type ThemeKey = '--accent-color' | '--animate' | '--aspect-ratio' | '--backdrop-blur' | '--backdrop-brightness' | '--backdrop-contrast' | '--backdrop-grayscale' | '--backdrop-hue-rotate' | '--backdrop-invert' | '--backdrop-opacity' | '--backdrop-saturate' | '--backdrop-sepia' | '--background-color' | '--background-image' | '--blur' | '--border-color' | '--border-spacing' | '--border-width' | '--box-shadow-color' | '--breakpoint' | '--brightness' | '--caret-color' | '--color' | '--columns' | '--contrast' | '--cursor' | '--default-border-width' | '--default-ring-color' | '--default-ring-width' | '--divide-width' | '--divide-color' | '--drop-shadow' | '--fill' | '--flex-basis' | '--font-family' | '--font-size' | '--font-weight' | '--gap' | '--gradient-color-stop-positions' | '--grayscale' | '--grid-auto-columns' | '--grid-auto-rows' | '--grid-column' | '--grid-column-end' | '--grid-column-start' | '--grid-row' | '--grid-row-end' | '--grid-row-start' | '--grid-template-columns' | '--grid-template-rows' | '--height' | '--hue-rotate' | '--inset' | '--inset-shadow' | '--invert' | '--letter-spacing' | '--line-height' | '--line-clamp' | '--list-style-image' | '--list-style-type' | '--margin' | '--max-height' | '--max-width' | '--min-height' | '--min-width' | '--object-position' | '--opacity' | '--order' | '--outline-color' | '--outline-width' | '--outline-offset' | '--padding' | '--placeholder-color' | '--radius' | '--ring-color' | '--ring-offset-color' | '--ring-offset-width' | '--ring-width' | '--rotate' | '--saturate' | '--scale' | '--scroll-margin' | '--scroll-padding' | '--sepia' | '--shadow' | '--size' | '--skew' | '--space' | '--spacing' | '--stroke' | '--stroke-width' | '--text-color' | '--text-decoration-color' | '--text-decoration-thickness' | '--text-indent' | '--text-underline-offset' | '--transform-origin' | '--transition-delay' | '--transition-duration' | '--transition-property' | '--transition-timing-function' | '--translate' | '--width' | '--z-index';
31
-
32
- type Rule = {
33
- kind: 'rule';
34
- selector: string;
35
- nodes: AstNode[];
36
- };
37
- type Declaration = {
38
- kind: 'declaration';
39
- property: string;
40
- value: string;
41
- important: boolean;
42
- };
43
- type Comment = {
44
- kind: 'comment';
45
- value: string;
46
- };
47
- type AstNode = Rule | Declaration | Comment;
48
-
49
1
  type ArbitraryUtilityValue = {
50
2
  kind: 'arbitrary';
51
3
  /**
@@ -220,37 +172,40 @@ type Candidate =
220
172
  negative: boolean;
221
173
  important: boolean;
222
174
  };
175
+ declare function parseCandidate(input: string, designSystem: DesignSystem): Candidate | null;
176
+ declare function parseVariant(variant: string, designSystem: DesignSystem): Variant | null;
223
177
 
224
- type CompileFn<T extends Candidate['kind']> = (value: Extract<Candidate, {
225
- kind: T;
226
- }>) => AstNode[] | undefined;
227
- interface SuggestionGroup {
228
- supportsNegative?: boolean;
229
- values: (string | null)[];
230
- modifiers: string[];
231
- }
232
- declare class Utilities {
233
- private utilities;
234
- private completions;
235
- static(name: string, compileFn: CompileFn<'static'>): void;
236
- functional(name: string, compileFn: CompileFn<'functional'>): void;
237
- arbitrary(compileFn: CompileFn<'arbitrary'>): void;
238
- has(name: string): boolean;
239
- get(name: string | symbol): {
240
- kind: "arbitrary" | "static" | "functional";
241
- compileFn: CompileFn<any>;
242
- } | undefined;
243
- kind(name: string): "arbitrary" | "static" | "functional";
244
- getCompletions(name: string): SuggestionGroup[];
245
- suggest(name: string, groups: () => SuggestionGroup[]): void;
246
- keys(): IterableIterator<string | symbol>;
247
- entries(): IterableIterator<[string | symbol, {
248
- kind: "arbitrary" | "static" | "functional";
249
- compileFn: CompileFn<any>;
250
- }]>;
251
- getArbitrary(): CompileFn<any>;
252
- private set;
178
+ type Rule = {
179
+ kind: 'rule';
180
+ selector: string;
181
+ nodes: AstNode[];
182
+ };
183
+ type Declaration = {
184
+ kind: 'declaration';
185
+ property: string;
186
+ value: string;
187
+ important: boolean;
188
+ };
189
+ type Comment = {
190
+ kind: 'comment';
191
+ value: string;
192
+ };
193
+ type AstNode = Rule | Declaration | Comment;
194
+
195
+ declare class Theme {
196
+ private values;
197
+ constructor(values?: Map<string, string>);
198
+ add(key: string, value: string): void;
199
+ keysInNamespaces(themeKeys: ThemeKey[]): string[];
200
+ get(themeKeys: ThemeKey[]): string | null;
201
+ entries(): IterableIterator<[string, string]>;
202
+ clearNamespace(namespace: string): void;
203
+ resolveKey(candidateValue: string, themeKeys: ThemeKey[]): string | null;
204
+ resolve(candidateValue: string, themeKeys: ThemeKey[]): string | null;
205
+ resolveWith(candidateValue: string, themeKeys: ThemeKey[], nestedKeys?: `--${string}`[]): [string, Record<string, string>] | null;
206
+ namespace(namespace: string): Map<string | null, string>;
253
207
  }
208
+ type ThemeKey = '--accent-color' | '--animate' | '--aspect-ratio' | '--backdrop-blur' | '--backdrop-brightness' | '--backdrop-contrast' | '--backdrop-grayscale' | '--backdrop-hue-rotate' | '--backdrop-invert' | '--backdrop-opacity' | '--backdrop-saturate' | '--backdrop-sepia' | '--background-color' | '--background-image' | '--blur' | '--border-color' | '--border-spacing' | '--border-width' | '--box-shadow-color' | '--breakpoint' | '--brightness' | '--caret-color' | '--color' | '--columns' | '--contrast' | '--cursor' | '--default-border-width' | '--default-ring-color' | '--default-ring-width' | '--divide-width' | '--divide-color' | '--drop-shadow' | '--fill' | '--flex-basis' | '--font-family' | '--font-size' | '--font-weight' | '--gap' | '--gradient-color-stop-positions' | '--grayscale' | '--grid-auto-columns' | '--grid-auto-rows' | '--grid-column' | '--grid-column-end' | '--grid-column-start' | '--grid-row' | '--grid-row-end' | '--grid-row-start' | '--grid-template-columns' | '--grid-template-rows' | '--height' | '--hue-rotate' | '--inset' | '--inset-shadow' | '--invert' | '--letter-spacing' | '--line-height' | '--line-clamp' | '--list-style-image' | '--list-style-type' | '--margin' | '--max-height' | '--max-width' | '--min-height' | '--min-width' | '--object-position' | '--opacity' | '--order' | '--outline-color' | '--outline-width' | '--outline-offset' | '--padding' | '--placeholder-color' | '--radius' | '--ring-color' | '--ring-offset-color' | '--ring-offset-width' | '--ring-width' | '--rotate' | '--saturate' | '--scale' | '--scroll-margin' | '--scroll-padding' | '--sepia' | '--shadow' | '--size' | '--skew' | '--space' | '--spacing' | '--stroke' | '--stroke-width' | '--text-color' | '--text-decoration-color' | '--text-decoration-thickness' | '--text-indent' | '--text-underline-offset' | '--transform-origin' | '--transition-delay' | '--transition-duration' | '--transition-property' | '--transition-timing-function' | '--translate' | '--width' | '--z-index';
254
209
 
255
210
  type VariantFn<T extends Variant['kind']> = (rule: Rule, variant: Extract<Variant, {
256
211
  kind: T;
@@ -304,6 +259,58 @@ declare class Variants {
304
259
  private nextOrder;
305
260
  }
306
261
 
262
+ declare function compileAstNodes(rawCandidate: string, designSystem: DesignSystem): {
263
+ node: Rule;
264
+ propertySort: number[];
265
+ } | null;
266
+
267
+ interface ClassMetadata {
268
+ modifiers: string[];
269
+ }
270
+ type ClassEntry = [string, ClassMetadata];
271
+ interface SelectorOptions {
272
+ modifier?: string;
273
+ value?: string;
274
+ }
275
+ interface VariantEntry {
276
+ name: string;
277
+ isArbitrary: boolean;
278
+ values: string[];
279
+ hasDash: boolean;
280
+ selectors: (options: SelectorOptions) => string[];
281
+ }
282
+
283
+ type CompileFn<T extends Candidate['kind']> = (value: Extract<Candidate, {
284
+ kind: T;
285
+ }>) => AstNode[] | undefined;
286
+ interface SuggestionGroup {
287
+ supportsNegative?: boolean;
288
+ values: (string | null)[];
289
+ modifiers: string[];
290
+ }
291
+ declare class Utilities {
292
+ private utilities;
293
+ private completions;
294
+ static(name: string, compileFn: CompileFn<'static'>): void;
295
+ functional(name: string, compileFn: CompileFn<'functional'>): void;
296
+ arbitrary(compileFn: CompileFn<'arbitrary'>): void;
297
+ has(name: string): boolean;
298
+ get(name: string | symbol): {
299
+ kind: "arbitrary" | "static" | "functional";
300
+ compileFn: CompileFn<any>;
301
+ } | undefined;
302
+ kind(name: string): "arbitrary" | "static" | "functional";
303
+ getCompletions(name: string): SuggestionGroup[];
304
+ suggest(name: string, groups: () => SuggestionGroup[]): void;
305
+ keys(): IterableIterator<string | symbol>;
306
+ entries(): IterableIterator<[string | symbol, {
307
+ kind: "arbitrary" | "static" | "functional";
308
+ compileFn: CompileFn<any>;
309
+ }]>;
310
+ getArbitrary(): CompileFn<any>;
311
+ private set;
312
+ }
313
+
307
314
  type DesignSystem = {
308
315
  theme: Theme;
309
316
  utilities: Utilities;
@@ -312,9 +319,15 @@ type DesignSystem = {
312
319
  getClassOrder(classes: string[]): [string, bigint | null][];
313
320
  getClassList(): ClassEntry[];
314
321
  getVariants(): VariantEntry[];
322
+ parseCandidate(candidate: string): ReturnType<typeof parseCandidate>;
323
+ parseVariant(variant: string): ReturnType<typeof parseVariant>;
324
+ compileAstNodes(candidate: string): ReturnType<typeof compileAstNodes>;
325
+ getUsedVariants(): ReturnType<typeof parseVariant>[];
315
326
  };
316
327
 
317
- declare function compile(css: string, rawCandidates: string[]): string;
328
+ declare function compile(css: string): {
329
+ build(candidates: string[]): string;
330
+ };
318
331
  declare function optimizeCss(input: string, { file, minify }?: {
319
332
  file?: string;
320
333
  minify?: boolean;