styles-config 2.0.0-alpha.1 → 2.0.0-alpha.11
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/README.md +29 -11
- package/lib/index.cjs +249 -0
- package/lib/index.js +217 -4
- package/lib/options.d.ts +27 -0
- package/lib/types.d.ts +131 -28
- package/package.json +16 -8
- package/eslint.config.mjs +0 -6
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/loader.d.ts.map +0 -1
- package/lib/loader.js +0 -99
- package/lib/loader.js.map +0 -1
- package/lib/options.d.ts.map +0 -1
- package/lib/options.js +0 -128
- package/lib/options.js.map +0 -1
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/src/index.ts +0 -3
- package/src/loader.ts +0 -112
- package/src/options.ts +0 -172
- package/src/types.ts +0 -359
- package/test/options.test.ts +0 -256
- package/tsconfig.build.json +0 -10
- package/tsconfig.build.tsbuildinfo +0 -1
- package/tsconfig.json +0 -10
- package/tsconfig.tsbuildinfo +0 -1
package/lib/types.d.ts
CHANGED
|
@@ -7,36 +7,41 @@ export type MathMode = 'always' | 'parens-division' | 'parens' | 'strict';
|
|
|
7
7
|
*/
|
|
8
8
|
export type UnitMode = 'loose' | 'preserve' | 'strict';
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Function-call resolution modes — compiler input to the shared evaluator.
|
|
11
|
+
* Governs an optional (global) function call that matched a registered function
|
|
12
|
+
* but couldn't be evaluated: `preserve` renders it as-is (+ warning), `error`
|
|
13
|
+
* throws.
|
|
11
14
|
*/
|
|
12
|
-
export type
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Optional explicit filesystem root for script reads.
|
|
25
|
-
* If omitted, compiler resolves using entry/config roots.
|
|
26
|
-
*/
|
|
27
|
-
jsReadRoot?: string;
|
|
28
|
-
}
|
|
29
|
-
export type CompileJavaScriptOption = true | JavaScriptSandboxConfig;
|
|
15
|
+
export type FunctionMode = 'preserve' | 'error';
|
|
16
|
+
/**
|
|
17
|
+
* Equality compatibility modes for the shared guard evaluator. The names retain
|
|
18
|
+
* their source-compatibility meaning (Less 4.x and Sass diverge in opposite
|
|
19
|
+
* directions), not separate runtime semantics:
|
|
20
|
+
* - `less`: Less 4.x equality (numeric coercion; quoted vs unquoted distinct)
|
|
21
|
+
* - `sass`: Dart Sass equality (unit-strict; quote-insensitive strings)
|
|
22
|
+
* - `exact`: no coercion — operands must be the same node type
|
|
23
|
+
*/
|
|
24
|
+
export type EqualityMode = 'less' | 'sass' | 'exact';
|
|
25
|
+
export type ExtendSelectorKind = 'simple' | 'basic' | 'pseudo' | 'complex' | 'compound';
|
|
30
26
|
/**
|
|
31
27
|
* Less compiler options
|
|
32
28
|
* Based on less.js default-options.js and bin/lessc
|
|
33
29
|
*/
|
|
34
30
|
export interface LessOptions {
|
|
31
|
+
/**
|
|
32
|
+
* Restrict which selector shapes are allowed in extend targets.
|
|
33
|
+
* When set, any other selector kind is a parse error.
|
|
34
|
+
*/
|
|
35
|
+
allowExtendSelectors?: ExtendSelectorKind[];
|
|
35
36
|
/**
|
|
36
37
|
* Inline Javascript - @plugin still allowed
|
|
37
38
|
* @default false
|
|
38
39
|
*/
|
|
39
40
|
javascriptEnabled?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Use `disableScriptModules` instead.
|
|
43
|
+
*/
|
|
44
|
+
disablePluginRule?: boolean;
|
|
40
45
|
/**
|
|
41
46
|
* Outputs a makefile import dependency list to stdout.
|
|
42
47
|
* @default false
|
|
@@ -61,6 +66,15 @@ export interface LessOptions {
|
|
|
61
66
|
* @default []
|
|
62
67
|
*/
|
|
63
68
|
paths?: string[];
|
|
69
|
+
/**
|
|
70
|
+
* Controls whether Less imports are loaded and emitted.
|
|
71
|
+
*
|
|
72
|
+
* Less's `processImports: false` path skips import processing; imported
|
|
73
|
+
* stylesheets are neither loaded nor preserved as CSS `@import` statements.
|
|
74
|
+
*
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
processImports?: boolean;
|
|
64
78
|
/**
|
|
65
79
|
* Color output in the terminal
|
|
66
80
|
* @default true
|
|
@@ -124,11 +138,21 @@ export interface LessOptions {
|
|
|
124
138
|
* @default 'preserve'
|
|
125
139
|
*/
|
|
126
140
|
unitMode?: UnitMode;
|
|
141
|
+
/**
|
|
142
|
+
* How to handle an optional/global function call that matched a registered
|
|
143
|
+
* function but couldn't be evaluated (no matching signature, or it threw) —
|
|
144
|
+
* e.g. `unit(80/16)`, `color("x")`. Mirrors {@link unitMode}.
|
|
145
|
+
* - 'preserve': render the call as-is (like an unknown CSS function) + warn
|
|
146
|
+
* - 'error': throw the underlying function error (Less 4.x behavior)
|
|
147
|
+
* Unknown function names always render as-is regardless.
|
|
148
|
+
* @default 'preserve'
|
|
149
|
+
*/
|
|
150
|
+
functionMode?: FunctionMode;
|
|
127
151
|
/**
|
|
128
152
|
* How to handle equality/coercion in guards and comparisons.
|
|
129
|
-
* - '
|
|
153
|
+
* - 'loose': Less-compatible loose (coercive) equality (JS '==')
|
|
130
154
|
* - 'strict': type-strict behavior
|
|
131
|
-
* @default '
|
|
155
|
+
* @default 'loose'
|
|
132
156
|
*/
|
|
133
157
|
equalityMode?: EqualityMode;
|
|
134
158
|
/**
|
|
@@ -201,6 +225,26 @@ export interface LessOptions {
|
|
|
201
225
|
* @default false
|
|
202
226
|
*/
|
|
203
227
|
quiet?: boolean;
|
|
228
|
+
/**
|
|
229
|
+
* Convenience preset. When `true`, sets the strict bundle for any of the
|
|
230
|
+
* following left `undefined` (individual options always win):
|
|
231
|
+
* - `unitMode: 'strict'`
|
|
232
|
+
* - `equalityMode: 'exact'` (the no-coercion dialect)
|
|
233
|
+
* - `leakyScope: false`
|
|
234
|
+
* - `allowOverloadedImport: false`
|
|
235
|
+
*
|
|
236
|
+
* Modeled after `tsconfig` `strict`: it only *sets* semantic options, it is not
|
|
237
|
+
* itself a mode.
|
|
238
|
+
* @default false
|
|
239
|
+
*/
|
|
240
|
+
strict?: boolean;
|
|
241
|
+
/**
|
|
242
|
+
* Whether re-importing a file/namespace may contribute *overloaded* (duplicated,
|
|
243
|
+
* additively-merged) definitions rather than being de-duplicated like Less's
|
|
244
|
+
* `@import (once)`. `strict` sets this to `false`.
|
|
245
|
+
* @default true
|
|
246
|
+
*/
|
|
247
|
+
allowOverloadedImport?: boolean;
|
|
204
248
|
/**
|
|
205
249
|
* @deprecated This is legacy Less behavior.
|
|
206
250
|
*
|
|
@@ -212,7 +256,7 @@ export interface LessOptions {
|
|
|
212
256
|
* - Both mixins and detached rulesets: Mixin and VarDeclaration nodes are 'private'
|
|
213
257
|
* @default true
|
|
214
258
|
*/
|
|
215
|
-
|
|
259
|
+
leakyScope?: boolean;
|
|
216
260
|
/**
|
|
217
261
|
* Whether to collapse nested selectors (Less 1.x-4.x style flattening)
|
|
218
262
|
* When true, nested selectors like `.parent { .child { } }` are flattened to `.parent .child { }`
|
|
@@ -228,6 +272,13 @@ export interface LessOptions {
|
|
|
228
272
|
*/
|
|
229
273
|
bubbleRootAtRules?: boolean;
|
|
230
274
|
}
|
|
275
|
+
export interface ScssOptions {
|
|
276
|
+
allowExtendSelectors?: ExtendSelectorKind[];
|
|
277
|
+
unitMode?: UnitMode;
|
|
278
|
+
equalityMode?: EqualityMode;
|
|
279
|
+
collapseNesting?: boolean;
|
|
280
|
+
[key: string]: any;
|
|
281
|
+
}
|
|
231
282
|
/**
|
|
232
283
|
* Base interface for file-matching options
|
|
233
284
|
*/
|
|
@@ -244,9 +295,18 @@ export interface FileMatchOptions {
|
|
|
244
295
|
export interface InputOptions extends FileMatchOptions {
|
|
245
296
|
mathMode?: MathMode;
|
|
246
297
|
unitMode?: UnitMode;
|
|
298
|
+
functionMode?: FunctionMode;
|
|
247
299
|
equalityMode?: EqualityMode;
|
|
300
|
+
strict?: boolean;
|
|
301
|
+
allowOverloadedImport?: boolean;
|
|
302
|
+
processImports?: boolean;
|
|
303
|
+
allowExtendSelectors?: ExtendSelectorKind[];
|
|
304
|
+
disableScriptModules?: boolean;
|
|
305
|
+
/**
|
|
306
|
+
* @deprecated Use `disableScriptModules` instead.
|
|
307
|
+
*/
|
|
308
|
+
disablePluginRule?: boolean;
|
|
248
309
|
searchPaths?: string[];
|
|
249
|
-
enableJavaScript?: boolean;
|
|
250
310
|
javascriptEnabled?: boolean;
|
|
251
311
|
paths?: string[];
|
|
252
312
|
globalVars?: Record<string, string> | null;
|
|
@@ -254,7 +314,7 @@ export interface InputOptions extends FileMatchOptions {
|
|
|
254
314
|
strictImports?: boolean | 'error';
|
|
255
315
|
rewriteUrls?: boolean | 'all' | 'local' | 'off';
|
|
256
316
|
rootpath?: string;
|
|
257
|
-
|
|
317
|
+
leakyScope?: boolean;
|
|
258
318
|
collapseNesting?: boolean;
|
|
259
319
|
bubbleRootAtRules?: boolean;
|
|
260
320
|
/** Allow additional language-specific options */
|
|
@@ -280,6 +340,29 @@ export interface OutputOptions extends FileMatchOptions {
|
|
|
280
340
|
/** Allow additional options */
|
|
281
341
|
[key: string]: any;
|
|
282
342
|
}
|
|
343
|
+
export type LintSeverity = 'off' | 'warn' | 'error';
|
|
344
|
+
export interface LintConfig {
|
|
345
|
+
/**
|
|
346
|
+
* File paths or glob patterns to lint when the CLI is run without positional
|
|
347
|
+
* patterns.
|
|
348
|
+
*/
|
|
349
|
+
files?: string | string[];
|
|
350
|
+
/**
|
|
351
|
+
* File paths or glob patterns excluded from linting.
|
|
352
|
+
*/
|
|
353
|
+
ignoreFiles?: string | string[];
|
|
354
|
+
/**
|
|
355
|
+
* Whether parser syntax diagnostics are surfaced by lint.
|
|
356
|
+
*
|
|
357
|
+
* @default true
|
|
358
|
+
*/
|
|
359
|
+
reportSyntax?: boolean;
|
|
360
|
+
/**
|
|
361
|
+
* Per-diagnostic policy. `off` suppresses a diagnostic, `warn` and `error`
|
|
362
|
+
* override the detector's default severity.
|
|
363
|
+
*/
|
|
364
|
+
diagnostics?: Record<string, LintSeverity>;
|
|
365
|
+
}
|
|
283
366
|
export interface StylesConfig {
|
|
284
367
|
compile?: {
|
|
285
368
|
/**
|
|
@@ -292,11 +375,30 @@ export interface StylesConfig {
|
|
|
292
375
|
*/
|
|
293
376
|
plugins?: Array<any | string>;
|
|
294
377
|
searchPaths?: string[];
|
|
295
|
-
enableJavaScript?: boolean;
|
|
296
|
-
javascript?: CompileJavaScriptOption;
|
|
297
378
|
mathMode?: MathMode;
|
|
298
379
|
unitMode?: UnitMode;
|
|
380
|
+
functionMode?: FunctionMode;
|
|
299
381
|
equalityMode?: EqualityMode;
|
|
382
|
+
/** See {@link LessOptions.strict}. Expanded onto the other compile modes. */
|
|
383
|
+
strict?: boolean;
|
|
384
|
+
/** See {@link LessOptions.allowOverloadedImport}. */
|
|
385
|
+
allowOverloadedImport?: boolean;
|
|
386
|
+
/** See {@link LessOptions.leakyScope}. */
|
|
387
|
+
leakyScope?: boolean;
|
|
388
|
+
/** See {@link LessOptions.processImports}. */
|
|
389
|
+
processImports?: boolean;
|
|
390
|
+
allowExtendSelectors?: ExtendSelectorKind[];
|
|
391
|
+
disableScriptModules?: boolean;
|
|
392
|
+
/**
|
|
393
|
+
* @deprecated Use `disableScriptModules` instead.
|
|
394
|
+
*/
|
|
395
|
+
disablePluginRule?: boolean;
|
|
396
|
+
/**
|
|
397
|
+
* Filesystem root that Less `@plugin` / script-module scripts are allowed to
|
|
398
|
+
* be read from. When set, it overrides the default (the entry file's
|
|
399
|
+
* directory). Paths outside this root are rejected by @jesscss/plugin-js.
|
|
400
|
+
*/
|
|
401
|
+
jsReadRoot?: string;
|
|
300
402
|
};
|
|
301
403
|
/**
|
|
302
404
|
* Input file options. Can be a single object for defaults, or an array
|
|
@@ -310,11 +412,12 @@ export interface StylesConfig {
|
|
|
310
412
|
* Entries without a `file` property serve as defaults.
|
|
311
413
|
*/
|
|
312
414
|
output?: OutputOptions | OutputOptions[];
|
|
415
|
+
lint?: LintConfig;
|
|
313
416
|
language?: {
|
|
314
417
|
less?: LessOptions;
|
|
315
|
-
scss?:
|
|
418
|
+
scss?: ScssOptions;
|
|
316
419
|
css?: Record<string, any>;
|
|
317
420
|
jess?: Record<string, any>;
|
|
318
|
-
[key: string]: LessOptions | Record<string, any> | undefined;
|
|
421
|
+
[key: string]: LessOptions | ScssOptions | Record<string, any> | undefined;
|
|
319
422
|
};
|
|
320
423
|
}
|
package/package.json
CHANGED
|
@@ -1,35 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "styles-config",
|
|
3
|
+
"type": "module",
|
|
3
4
|
"publishConfig": {
|
|
4
5
|
"access": "public"
|
|
5
6
|
},
|
|
6
|
-
"version": "2.0.0-alpha.
|
|
7
|
+
"version": "2.0.0-alpha.11",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
10
|
+
},
|
|
7
11
|
"description": "General-purpose configuration for styling frameworks (Jess, Less, Sass, Tailwind, etc.)",
|
|
8
|
-
"main": "lib/index.
|
|
12
|
+
"main": "lib/index.cjs",
|
|
9
13
|
"types": "lib/index.d.ts",
|
|
10
14
|
"exports": {
|
|
11
15
|
".": {
|
|
12
|
-
"import": "./lib/index.js",
|
|
13
16
|
"types": "./lib/index.d.ts",
|
|
14
|
-
"
|
|
17
|
+
"import": "./lib/index.js",
|
|
18
|
+
"require": "./lib/index.cjs"
|
|
15
19
|
}
|
|
16
20
|
},
|
|
21
|
+
"files": [
|
|
22
|
+
"lib"
|
|
23
|
+
],
|
|
17
24
|
"dependencies": {
|
|
18
|
-
"cosmiconfig": "^9.0.
|
|
25
|
+
"cosmiconfig": "^9.0.2",
|
|
19
26
|
"picomatch": "^4.0.2",
|
|
20
|
-
"@jesscss/core": "2.0.0-alpha.
|
|
27
|
+
"@jesscss/core": "2.0.0-alpha.11"
|
|
21
28
|
},
|
|
22
29
|
"devDependencies": {
|
|
23
30
|
"@types/node": "^22.10.2",
|
|
24
31
|
"@types/picomatch": "^3.0.1",
|
|
25
32
|
"typescript": "^5.7.2",
|
|
26
|
-
"vitest": "^
|
|
33
|
+
"vitest": "^4.1.0"
|
|
27
34
|
},
|
|
28
35
|
"author": "Matthew Dean",
|
|
29
36
|
"license": "MIT",
|
|
37
|
+
"module": "lib/index.js",
|
|
30
38
|
"scripts": {
|
|
31
39
|
"build": "pnpm compile",
|
|
32
|
-
"compile": "tsc -p tsconfig.build.json",
|
|
40
|
+
"compile": "tsdown --tsconfig tsconfig.build.json --no-dts && tsc -p tsconfig.build.json --emitDeclarationOnly --noCheck",
|
|
33
41
|
"test": "vitest"
|
|
34
42
|
}
|
|
35
43
|
}
|
package/eslint.config.mjs
DELETED
package/lib/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
package/lib/loader.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA4C5C;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAGlF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAGhE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAGvF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAGrE"}
|
package/lib/loader.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { cosmiconfig, cosmiconfigSync, defaultLoadersSync } from 'cosmiconfig';
|
|
2
|
-
const explorer = cosmiconfig('styles', {
|
|
3
|
-
searchPlaces: [
|
|
4
|
-
'styles.config.ts',
|
|
5
|
-
'styles.config.js',
|
|
6
|
-
'styles.config.mts',
|
|
7
|
-
'styles.config.mjs',
|
|
8
|
-
'styles.config.cjs',
|
|
9
|
-
'styles.config.cts'
|
|
10
|
-
],
|
|
11
|
-
loaders: {
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
13
|
-
'.mts': defaultLoadersSync['.ts'],
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
15
|
-
'.cts': defaultLoadersSync['.ts'],
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
17
|
-
'.mjs': defaultLoadersSync['.js'],
|
|
18
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
19
|
-
'.cjs': defaultLoadersSync['.cjs']
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
const explorerSync = cosmiconfigSync('styles', {
|
|
23
|
-
searchPlaces: [
|
|
24
|
-
'styles.config.ts',
|
|
25
|
-
'styles.config.js',
|
|
26
|
-
'styles.config.mts',
|
|
27
|
-
'styles.config.mjs',
|
|
28
|
-
'styles.config.cjs',
|
|
29
|
-
'styles.config.cts'
|
|
30
|
-
],
|
|
31
|
-
loaders: {
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
33
|
-
'.mts': defaultLoadersSync['.ts'],
|
|
34
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
35
|
-
'.cts': defaultLoadersSync['.ts'],
|
|
36
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
37
|
-
'.mjs': defaultLoadersSync['.js'],
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
39
|
-
'.cjs': defaultLoadersSync['.cjs']
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
/**
|
|
43
|
-
* Load styles configuration from the file system (async)
|
|
44
|
-
* @param searchFrom - Directory to search from (defaults to process.cwd())
|
|
45
|
-
* @returns Configuration object or null if not found
|
|
46
|
-
*/
|
|
47
|
-
export async function loadConfig(searchFrom) {
|
|
48
|
-
const result = await explorer.search(searchFrom);
|
|
49
|
-
return result?.config ? normalizeConfig(result.config) : null;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Load styles configuration from the file system (sync)
|
|
53
|
-
* @param searchFrom - Directory to search from (defaults to process.cwd())
|
|
54
|
-
* @returns Configuration object or empty object if not found
|
|
55
|
-
*/
|
|
56
|
-
export function loadConfigSync(searchFrom) {
|
|
57
|
-
const result = explorerSync.search(searchFrom);
|
|
58
|
-
return result?.config ? normalizeConfig(result.config) : {};
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Load styles configuration with metadata (sync).
|
|
62
|
-
* Includes config file path when a config file is discovered.
|
|
63
|
-
*/
|
|
64
|
-
export function loadConfigSyncWithMeta(searchFrom) {
|
|
65
|
-
const result = explorerSync.search(searchFrom);
|
|
66
|
-
return {
|
|
67
|
-
config: result?.config ? normalizeConfig(result.config) : {},
|
|
68
|
-
configFilePath: result?.filepath
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Load styles configuration from a specific file path (async)
|
|
73
|
-
* @param filePath - Path to the config file
|
|
74
|
-
* @returns Configuration object or null if not found
|
|
75
|
-
*/
|
|
76
|
-
export async function loadConfigFromPath(filePath) {
|
|
77
|
-
const result = await explorer.load(filePath);
|
|
78
|
-
return result?.config ? normalizeConfig(result.config) : null;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Load styles configuration from a specific file path (sync)
|
|
82
|
-
* @param filePath - Path to the config file
|
|
83
|
-
* @returns Configuration object or empty object if not found
|
|
84
|
-
*/
|
|
85
|
-
export function loadConfigFromPathSync(filePath) {
|
|
86
|
-
const result = explorerSync.load(filePath);
|
|
87
|
-
return result?.config ? normalizeConfig(result.config) : {};
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Normalize config object - handle default exports and ensure proper type
|
|
91
|
-
*/
|
|
92
|
-
function normalizeConfig(config) {
|
|
93
|
-
// Handle default export (common in ES modules)
|
|
94
|
-
if (typeof config === 'object' && config !== null && 'default' in config) {
|
|
95
|
-
return config.default;
|
|
96
|
-
}
|
|
97
|
-
return config;
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=loader.js.map
|
package/lib/loader.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/lib/options.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,GAAE,YAAiB,GAAG,WAAW,CAcrE;AACD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,GAAE,YAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAc7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,GAAE,YAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAc7E"}
|
package/lib/options.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import picomatch from 'picomatch';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
/**
|
|
4
|
-
* Map of file extensions to language keys
|
|
5
|
-
*/
|
|
6
|
-
const extensionToLanguage = new Map([
|
|
7
|
-
['.less', 'less'],
|
|
8
|
-
['.scss', 'scss'],
|
|
9
|
-
['.sass', 'scss'],
|
|
10
|
-
['.jess', 'jess'],
|
|
11
|
-
['.css', 'css']
|
|
12
|
-
]);
|
|
13
|
-
/**
|
|
14
|
-
* Infer language from a file path's extension
|
|
15
|
-
*/
|
|
16
|
-
function inferLanguage(filePath) {
|
|
17
|
-
if (!filePath) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
21
|
-
return extensionToLanguage.get(ext);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Check if a file path matches a pattern (exact path, relative path, or glob)
|
|
25
|
-
*/
|
|
26
|
-
function matchesFile(pattern, filePath) {
|
|
27
|
-
if (!pattern || !filePath) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
// Normalize paths for comparison
|
|
31
|
-
const normalizedPattern = path.normalize(pattern);
|
|
32
|
-
const normalizedFile = path.normalize(filePath);
|
|
33
|
-
// Try exact match first
|
|
34
|
-
if (normalizedPattern === normalizedFile) {
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
// Try basename match (e.g., pattern "styles.less" matches "/path/to/styles.less")
|
|
38
|
-
if (path.basename(normalizedFile) === normalizedPattern) {
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
// Try glob/pattern match using picomatch
|
|
42
|
-
const isMatch = picomatch(pattern, { dot: true });
|
|
43
|
-
return isMatch(filePath) || isMatch(normalizedFile);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Get matching options from an array of file-based options.
|
|
47
|
-
* Returns merged options from:
|
|
48
|
-
* 1. All entries without a `file` property (defaults)
|
|
49
|
-
* 2. All entries whose `file` pattern matches the given path
|
|
50
|
-
*
|
|
51
|
-
* Later entries override earlier ones.
|
|
52
|
-
*/
|
|
53
|
-
function getMatchingOptions(options, filePath) {
|
|
54
|
-
if (!options) {
|
|
55
|
-
return {};
|
|
56
|
-
}
|
|
57
|
-
const optionsArray = Array.isArray(options) ? options : [options];
|
|
58
|
-
let result = {};
|
|
59
|
-
for (const opt of optionsArray) {
|
|
60
|
-
// Include if: no file pattern (default), or file pattern matches
|
|
61
|
-
if (!opt.file || (filePath && matchesFile(opt.file, filePath))) {
|
|
62
|
-
// Merge this entry's options, excluding the 'file' property
|
|
63
|
-
const rest = { ...opt };
|
|
64
|
-
delete rest.file;
|
|
65
|
-
result = { ...result, ...rest };
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return result;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Get merged options by combining compile, language, input, and output settings.
|
|
72
|
-
*
|
|
73
|
-
* Merge priority (later wins):
|
|
74
|
-
* 1. compile options (base)
|
|
75
|
-
* 2. language-specific options (inferred from input extension or explicitly specified)
|
|
76
|
-
* 3. matched input options (if input path provided and matches)
|
|
77
|
-
* 4. matched output options (if output path provided and matches)
|
|
78
|
-
*
|
|
79
|
-
* @param config - The styles configuration object
|
|
80
|
-
* @param params - Options specifying language, input file, and output file
|
|
81
|
-
* @returns Merged options object
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* // Get Less options for a specific input/output (language inferred from .less extension)
|
|
85
|
-
* const options = getOptions(config, {
|
|
86
|
-
* input: 'src/styles/main.less',
|
|
87
|
-
* output: 'dist/main.css'
|
|
88
|
-
* });
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* // Explicitly specify language
|
|
92
|
-
* const options = getOptions(config, { language: 'less' });
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* // Get base options without language-specific settings
|
|
96
|
-
* const options = getOptions(config);
|
|
97
|
-
*/
|
|
98
|
-
export function getOptions(config = {}, params = {}) {
|
|
99
|
-
const { input: inputFile, output: outputFile } = params;
|
|
100
|
-
const { compile = {}, input, output, language: languageConfig = {} } = config;
|
|
101
|
-
// Determine language: explicit param > inferred from input extension
|
|
102
|
-
const language = params.language ?? inferLanguage(inputFile);
|
|
103
|
-
// Get language-specific options if language is determined
|
|
104
|
-
const languageOptions = language ? (languageConfig[language] ?? {}) : {};
|
|
105
|
-
// Get matched input and output options
|
|
106
|
-
const matchedInput = getMatchingOptions(input, inputFile);
|
|
107
|
-
const matchedOutput = getMatchingOptions(output, outputFile);
|
|
108
|
-
// Build result with proper merge priority:
|
|
109
|
-
// 1. compile (base)
|
|
110
|
-
// 2. language-specific
|
|
111
|
-
// 3. matched input
|
|
112
|
-
// 4. matched output
|
|
113
|
-
return {
|
|
114
|
-
// Start with compile-level settings
|
|
115
|
-
mathMode: compile.mathMode,
|
|
116
|
-
unitMode: compile.unitMode,
|
|
117
|
-
equalityMode: compile.equalityMode,
|
|
118
|
-
paths: compile.searchPaths,
|
|
119
|
-
javascriptEnabled: compile.enableJavaScript,
|
|
120
|
-
// Override with language-specific settings
|
|
121
|
-
...languageOptions,
|
|
122
|
-
// Override with matched input settings
|
|
123
|
-
...matchedInput,
|
|
124
|
-
// Override with matched output settings
|
|
125
|
-
...matchedOutput
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=options.js.map
|
package/lib/options.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE;QACR;;;;;;;WAOG;QACH,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,WAAW,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;KAC9D,CAAC;CACH;AAGD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
|
package/lib/types.js
DELETED
package/lib/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/src/index.ts
DELETED