@jesscss/plugin-less 2.0.0-alpha.5 → 2.0.0-alpha.7

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/lib/index.cjs ADDED
@@ -0,0 +1,233 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ //#region \0rolldown/runtime.js
6
+ var __create = Object.create;
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __getProtoOf = Object.getPrototypeOf;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
14
+ key = keys[i];
15
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: ((k) => from[k]).bind(null, key),
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+ //#endregion
27
+ let _jesscss_core = require("@jesscss/core");
28
+ let _jesscss_fns = require("@jesscss/fns");
29
+ _jesscss_fns = __toESM(_jesscss_fns);
30
+ let _jesscss_less_parser_jess = require("@jesscss/less-parser/jess");
31
+ let node_path = require("node:path");
32
+ node_path = __toESM(node_path);
33
+ let node_module = require("node:module");
34
+ let _jesscss_style_resolver = require("@jesscss/style-resolver");
35
+ //#region src/index.ts
36
+ /**
37
+ * The Less plugin's default option values — the single source of truth for the
38
+ * v5 defaults. The `LessPlugin` constructor fills any unset option from here,
39
+ * and the `lessc` CLI imports the same object so its defaults can never drift
40
+ * from the engine's. Note `collapseNesting: false` — v5 preserves nesting by
41
+ * default (Less 4.x flattened; that is now an explicit opt-in).
42
+ */
43
+ const lessPluginDefaults = {
44
+ mathMode: "parens-division",
45
+ unitMode: "preserve",
46
+ equalityMode: "less",
47
+ leakyScope: true,
48
+ bubbleRootAtRules: true,
49
+ collapseNesting: false
50
+ };
51
+ var LessPlugin = class extends _jesscss_core.AbstractPlugin {
52
+ name = "less";
53
+ supportedExtensions = [".less"];
54
+ parser;
55
+ mathMode;
56
+ unitMode;
57
+ equalityMode;
58
+ leakyScope;
59
+ bubbleRootAtRules;
60
+ collapseNesting;
61
+ constructor(opts = {}) {
62
+ super();
63
+ this.opts = opts;
64
+ let mathMode;
65
+ if (opts.mathMode !== void 0) mathMode = opts.mathMode;
66
+ else if (opts.math !== void 0) if (opts.math === 0 || opts.math === "always") mathMode = "always";
67
+ else if (opts.math === 1 || opts.math === "parens-division") mathMode = "parens-division";
68
+ else if (opts.math === 2 || opts.math === "parens" || opts.math === "strict") mathMode = "parens";
69
+ else mathMode = "parens";
70
+ else mathMode = lessPluginDefaults.mathMode;
71
+ this.mathMode = mathMode;
72
+ let unitMode;
73
+ if (opts.unitMode !== void 0) unitMode = opts.unitMode;
74
+ else if (opts.strictUnits === true) unitMode = "strict";
75
+ else unitMode = lessPluginDefaults.unitMode;
76
+ this.unitMode = unitMode;
77
+ this.equalityMode = opts.equalityMode ?? lessPluginDefaults.equalityMode;
78
+ this.leakyScope = opts.leakyScope ?? lessPluginDefaults.leakyScope;
79
+ this.bubbleRootAtRules = opts.bubbleRootAtRules ?? lessPluginDefaults.bubbleRootAtRules;
80
+ this.collapseNesting = opts.collapseNesting ?? lessPluginDefaults.collapseNesting;
81
+ this.parser = new _jesscss_less_parser_jess.Parser();
82
+ }
83
+ createTreeContext(filePath, source) {
84
+ return new _jesscss_core.TreeContext({
85
+ file: {
86
+ name: node_path.default.basename(filePath),
87
+ path: node_path.default.dirname(filePath),
88
+ fullPath: filePath,
89
+ source
90
+ },
91
+ mathMode: this.mathMode,
92
+ unitMode: this.unitMode,
93
+ equalityMode: this.equalityMode,
94
+ plugin: this,
95
+ allowExtendSelectors: this.opts.allowExtendSelectors,
96
+ collapseNesting: this.collapseNesting,
97
+ leakyScope: this.leakyScope,
98
+ bubbleRootAtRules: this.bubbleRootAtRules
99
+ });
100
+ }
101
+ _registerFunctions(tree) {
102
+ const registeredNames = [];
103
+ for (const [key, value] of Object.entries(_jesscss_fns)) {
104
+ if (typeof value !== "function") continue;
105
+ const runtimeName = value.name || key;
106
+ tree.setFunctionBinding(runtimeName, new _jesscss_core.JsFunction({
107
+ name: runtimeName,
108
+ fn: value
109
+ }));
110
+ registeredNames.push(runtimeName);
111
+ }
112
+ }
113
+ expandImport(importPath, currentDir) {
114
+ return (0, _jesscss_style_resolver.expandLessImportCandidates)(importPath);
115
+ }
116
+ resolve(filePath, currentDir, searchPaths) {
117
+ const mapped = (Array.isArray(filePath) ? filePath : [filePath]).map((candidate) => {
118
+ if (candidate.startsWith("@less/test-import-module/")) {
119
+ const after = candidate.slice(25);
120
+ const marker = `${node_path.default.sep}packages${node_path.default.sep}test-data${node_path.default.sep}`;
121
+ const idx = currentDir.indexOf(marker);
122
+ if (idx !== -1) {
123
+ const packagesRoot = currentDir.slice(0, idx + `${node_path.default.sep}packages`.length);
124
+ return node_path.default.join(packagesRoot, "test-import-module", after);
125
+ }
126
+ }
127
+ const m = candidate.match(/^https?:\/\/cdn\.jsdelivr\.net\/npm\/([^?#]+)(?:[?#].*)?$/i);
128
+ if (m?.[1]) return m[1];
129
+ const mProtocolRelative = candidate.match(/^\/\/cdn\.jsdelivr\.net\/npm\/([^?#]+)(?:[?#].*)?$/i);
130
+ if (mProtocolRelative?.[1]) return mProtocolRelative[1];
131
+ return candidate;
132
+ });
133
+ const out = [...super.resolve(mapped, currentDir, searchPaths)];
134
+ const bases = [
135
+ currentDir,
136
+ ...searchPaths,
137
+ process.cwd()
138
+ ];
139
+ const looksBareSpecifier = (p) => !node_path.default.isAbsolute(p) && !p.startsWith("./") && !p.startsWith("../") && !p.startsWith("/") && !/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(p);
140
+ for (const candidate of mapped) {
141
+ if (!looksBareSpecifier(candidate)) continue;
142
+ for (const base of bases) {
143
+ const baseDir = node_path.default.isAbsolute(base) ? base : node_path.default.resolve(currentDir, base);
144
+ try {
145
+ const resolvedModule = (0, node_module.createRequire)(node_path.default.join(baseDir, "__jess_resolve__.js")).resolve(candidate);
146
+ if (!out.includes(resolvedModule)) out.push(resolvedModule);
147
+ break;
148
+ } catch {
149
+ try {
150
+ const resolvedModuleLess = (0, node_module.createRequire)(node_path.default.join(baseDir, "__jess_resolve__.js")).resolve(`${candidate}.less`);
151
+ if (!out.includes(resolvedModuleLess)) out.push(resolvedModuleLess);
152
+ break;
153
+ } catch {}
154
+ }
155
+ }
156
+ }
157
+ return out;
158
+ }
159
+ safeParse(filePath, source, _parseOptions) {
160
+ const context = this.createTreeContext(filePath, source);
161
+ const errors = [];
162
+ const warnings = [];
163
+ let tree;
164
+ try {
165
+ const parseResult = this.parser.parse(source, "Stylesheet", { context });
166
+ tree = parseResult.tree;
167
+ const parsedContext = parseResult.context ?? context;
168
+ if (tree) tree._treeContext = parsedContext;
169
+ context.opts.trivia = parseResult.trivia;
170
+ context.opts.liftedCommentRanges = parseResult.liftedCommentRanges;
171
+ if ("warnings" in parseResult && parseResult.warnings) for (const warning of parseResult.warnings) {
172
+ const line = warning.token?.startLine ?? 1;
173
+ const column = warning.token?.startColumn ?? 1;
174
+ warnings.push({
175
+ code: "parse/deprecated",
176
+ phase: "parse",
177
+ message: warning.message,
178
+ reason: warning.message,
179
+ fix: "Update your code to use the recommended syntax.",
180
+ file: context.file,
181
+ filePath,
182
+ line,
183
+ column,
184
+ lines: (0, _jesscss_core.extractRelevantLines)(source, line)
185
+ });
186
+ }
187
+ if (parseResult.errors.length) for (const error of parseResult.errors) {
188
+ const line = error.token?.startLine ?? 1;
189
+ const diagnostic = (0, _jesscss_core.toDiagnostic)((0, _jesscss_core.getErrorFromParser)([error], void 0, filePath, source, { file: context.file }));
190
+ if (!diagnostic.lines) diagnostic.lines = (0, _jesscss_core.extractRelevantLines)(source, line);
191
+ if ("errors" in diagnostic) errors.push(diagnostic);
192
+ else warnings.push(diagnostic);
193
+ }
194
+ } catch (error) {
195
+ if (error instanceof _jesscss_core.JessError) {
196
+ const diagnostic = (0, _jesscss_core.toDiagnostic)(error);
197
+ if ("errors" in diagnostic) errors.push(diagnostic);
198
+ else warnings.push(diagnostic);
199
+ } else {
200
+ const message = error instanceof Error ? error.message : "Unknown parsing error";
201
+ errors.push({
202
+ code: "internal/unknown",
203
+ phase: "parse",
204
+ message,
205
+ reason: message || "An unexpected error occurred during parsing.",
206
+ fix: "Check the file syntax and ensure it is valid.",
207
+ file: context.file,
208
+ filePath,
209
+ line: 1,
210
+ column: 1,
211
+ lines: (0, _jesscss_core.extractRelevantLines)(source, 1)
212
+ });
213
+ }
214
+ return {
215
+ errors,
216
+ warnings
217
+ };
218
+ }
219
+ if (tree && errors.length === 0) this._registerFunctions(tree);
220
+ return {
221
+ tree,
222
+ errors,
223
+ warnings
224
+ };
225
+ }
226
+ };
227
+ const lessPlugin = ((opts) => {
228
+ return new LessPlugin(opts);
229
+ });
230
+ //#endregion
231
+ exports.LessPlugin = LessPlugin;
232
+ exports.default = lessPlugin;
233
+ exports.lessPluginDefaults = lessPluginDefaults;
package/lib/index.d.ts CHANGED
@@ -1,23 +1,40 @@
1
- import { AbstractPlugin, type ISafeParseResult } from '@jesscss/core';
1
+ import { AbstractPlugin, type ISafeParseResult, type SafeParseOptions } from '@jesscss/core';
2
2
  import type { EqualityMode, MathMode, UnitMode, LessOptions } from 'styles-config';
3
- import { Parser } from '@jesscss/less-parser';
3
+ import { Parser } from '@jesscss/less-parser/jess';
4
+ export type LessPluginOptions = LessOptions;
5
+ /**
6
+ * The Less plugin's default option values — the single source of truth for the
7
+ * v5 defaults. The `LessPlugin` constructor fills any unset option from here,
8
+ * and the `lessc` CLI imports the same object so its defaults can never drift
9
+ * from the engine's. Note `collapseNesting: false` — v5 preserves nesting by
10
+ * default (Less 4.x flattened; that is now an explicit opt-in).
11
+ */
12
+ export declare const lessPluginDefaults: {
13
+ readonly mathMode: MathMode;
14
+ readonly unitMode: UnitMode;
15
+ readonly equalityMode: EqualityMode;
16
+ readonly leakyScope: true;
17
+ readonly bubbleRootAtRules: true;
18
+ readonly collapseNesting: false;
19
+ };
4
20
  export declare class LessPlugin extends AbstractPlugin {
5
- opts: LessOptions;
21
+ opts: LessPluginOptions;
6
22
  name: string;
7
23
  supportedExtensions: string[];
8
24
  parser: Parser;
9
25
  mathMode: MathMode;
10
26
  unitMode: UnitMode;
11
27
  equalityMode: EqualityMode;
12
- leakyRules: boolean;
28
+ leakyScope: boolean;
13
29
  bubbleRootAtRules: boolean;
14
30
  collapseNesting: boolean;
15
- constructor(opts?: LessOptions);
31
+ constructor(opts?: LessPluginOptions);
32
+ private createTreeContext;
16
33
  private _registerFunctions;
17
34
  expandImport(importPath: string, currentDir: string): string[];
18
35
  resolve(filePath: string | string[], currentDir: string, searchPaths: string[]): string[];
19
- safeParse(filePath: string, source: string): ISafeParseResult;
36
+ safeParse(filePath: string, source: string, _parseOptions?: SafeParseOptions): ISafeParseResult;
20
37
  }
21
38
  export type { LessOptions } from 'styles-config';
22
- declare const lessPlugin: (opts?: LessOptions) => LessPlugin;
39
+ declare const lessPlugin: (opts?: LessPluginOptions) => LessPlugin;
23
40
  export default lessPlugin;
package/lib/index.js CHANGED
@@ -1,264 +1,203 @@
1
- import { AbstractPlugin, TreeContext, JsFunction, getErrorFromParser, toDiagnostic, extractRelevantLines } from '@jesscss/core';
2
- import * as lessFunctions from '@jesscss/fns';
3
- import { Parser } from '@jesscss/less-parser';
4
- import path from 'node:path';
5
- import { createRequire } from 'node:module';
6
- import { expandLessImportCandidates } from '@jesscss/style-resolver';
7
- export class LessPlugin extends AbstractPlugin {
8
- opts;
9
- name = 'less';
10
- supportedExtensions = ['.less'];
11
- parser;
12
- mathMode;
13
- unitMode;
14
- equalityMode;
15
- leakyRules;
16
- bubbleRootAtRules;
17
- collapseNesting;
18
- constructor(opts = {}) {
19
- super();
20
- this.opts = opts;
21
- // Handle deprecated math option -> mathMode conversion
22
- let mathMode;
23
- if (opts.mathMode !== undefined) {
24
- mathMode = opts.mathMode;
25
- }
26
- else if (opts.math !== undefined) {
27
- // Convert deprecated math option to mathMode
28
- if (opts.math === 0 || opts.math === 'always') {
29
- mathMode = 'always';
30
- }
31
- else if (opts.math === 1 || opts.math === 'parens-division') {
32
- mathMode = 'parens-division';
33
- }
34
- else if (opts.math === 2 || opts.math === 'parens' || opts.math === 'strict') {
35
- mathMode = 'parens';
36
- }
37
- else {
38
- // 3 or 'strict-legacy' -> 'parens' (deprecated, use 'strict' instead)
39
- mathMode = 'parens';
40
- }
41
- }
42
- else {
43
- mathMode = 'parens-division';
44
- }
45
- this.mathMode = mathMode;
46
- // Handle deprecated strictUnits option -> unitMode conversion
47
- let unitMode;
48
- if (opts.unitMode !== undefined) {
49
- unitMode = opts.unitMode;
50
- }
51
- else if (opts.strictUnits === true) {
52
- unitMode = 'strict';
53
- }
54
- else {
55
- unitMode = 'preserve';
56
- }
57
- this.unitMode = unitMode;
58
- this.equalityMode = opts.equalityMode ?? 'coerce';
59
- this.leakyRules = opts.leakyRules ?? true;
60
- this.bubbleRootAtRules = opts.bubbleRootAtRules ?? true;
61
- this.collapseNesting = opts.collapseNesting ?? false;
62
- // Pass options to parser (including leakyRules, defaulting to true)
63
- this.parser = new Parser();
64
- }
65
- _registerFunctions(tree) {
66
- const registeredNames = [];
67
- for (const [key, value] of Object.entries(lessFunctions)) {
68
- if (typeof value !== 'function') {
69
- continue;
70
- }
71
- const runtimeName = value.name ?? key;
72
- tree.register('function', new JsFunction({ name: runtimeName, fn: value }));
73
- registeredNames.push(runtimeName);
74
- }
75
- }
76
- expandImport(importPath, currentDir) {
77
- void currentDir;
78
- // Keep import expansion in sync with the language service.
79
- return expandLessImportCandidates(importPath);
80
- }
81
- resolve(filePath, currentDir, searchPaths) {
82
- const paths = Array.isArray(filePath) ? filePath : [filePath];
83
- const mapped = paths.map((candidate) => {
84
- if (candidate.startsWith('@less/test-import-module/')) {
85
- const after = candidate.slice('@less/test-import-module/'.length);
86
- const marker = `${path.sep}packages${path.sep}test-data${path.sep}`;
87
- const idx = currentDir.indexOf(marker);
88
- if (idx !== -1) {
89
- const packagesRoot = currentDir.slice(0, idx + `${path.sep}packages`.length);
90
- return path.join(packagesRoot, 'test-import-module', after);
91
- }
92
- }
93
- const m = candidate.match(/^https?:\/\/cdn\.jsdelivr\.net\/npm\/([^?#]+)(?:[?#].*)?$/i);
94
- if (m?.[1]) {
95
- return m[1];
96
- }
97
- const mProtocolRelative = candidate.match(/^\/\/cdn\.jsdelivr\.net\/npm\/([^?#]+)(?:[?#].*)?$/i);
98
- if (mProtocolRelative?.[1]) {
99
- return mProtocolRelative[1];
100
- }
101
- return candidate;
102
- });
103
- const resolved = super.resolve(mapped, currentDir, searchPaths);
104
- const out = [...resolved];
105
- const bases = [currentDir, ...searchPaths, process.cwd()];
106
- const looksBareSpecifier = (p) => !path.isAbsolute(p)
107
- && !p.startsWith('./')
108
- && !p.startsWith('../')
109
- && !p.startsWith('/')
110
- && !/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(p);
111
- for (const candidate of mapped) {
112
- if (!looksBareSpecifier(candidate)) {
113
- continue;
114
- }
115
- for (const base of bases) {
116
- const baseDir = path.isAbsolute(base) ? base : path.resolve(currentDir, base);
117
- try {
118
- const req = createRequire(path.join(baseDir, '__jess_resolve__.js'));
119
- const resolvedModule = req.resolve(candidate);
120
- if (!out.includes(resolvedModule)) {
121
- out.push(resolvedModule);
122
- }
123
- break;
124
- }
125
- catch {
126
- try {
127
- const req = createRequire(path.join(baseDir, '__jess_resolve__.js'));
128
- const resolvedModuleLess = req.resolve(`${candidate}.less`);
129
- if (!out.includes(resolvedModuleLess)) {
130
- out.push(resolvedModuleLess);
131
- }
132
- break;
133
- }
134
- catch {
135
- // keep trying other base dirs
136
- }
137
- }
138
- }
139
- }
140
- return out;
141
- }
142
- safeParse(filePath, source) {
143
- const context = new TreeContext({
144
- file: {
145
- name: path.basename(filePath),
146
- path: path.dirname(filePath),
147
- fullPath: filePath,
148
- source: source
149
- },
150
- mathMode: this.mathMode,
151
- unitMode: this.unitMode,
152
- equalityMode: this.equalityMode,
153
- plugin: this,
154
- collapseNesting: this.collapseNesting,
155
- leakyRules: this.leakyRules,
156
- bubbleRootAtRules: this.bubbleRootAtRules
157
- });
158
- const errors = [];
159
- const warnings = [];
160
- let tree;
161
- try {
162
- const parseResult = this.parser.parse(source, 'stylesheet', { context });
163
- tree = parseResult.tree;
164
- // Convert parser deprecation warnings to diagnostics
165
- if ('warnings' in parseResult && parseResult.warnings) {
166
- for (const warning of parseResult.warnings) {
167
- const line = warning.token?.startLine ?? 1;
168
- const column = warning.token?.startColumn ?? 1;
169
- warnings.push({
170
- code: 'parse/deprecated',
171
- phase: 'parse',
172
- message: warning.message,
173
- reason: warning.message,
174
- fix: 'Update your code to use the recommended syntax.',
175
- file: context.file,
176
- filePath: filePath,
177
- line,
178
- column,
179
- lines: extractRelevantLines(source, line)
180
- });
181
- }
182
- }
183
- // Convert all parser/lexer errors to normalized diagnostics
184
- if (parseResult.errors.length || parseResult.lexerResult?.errors?.length) {
185
- // Convert each parser error to a diagnostic
186
- for (const error of parseResult.errors) {
187
- const line = error.token?.startLine ?? error.line ?? 1;
188
- const jessError = getErrorFromParser([error], undefined, filePath, source, { file: context.file });
189
- const diagnostic = toDiagnostic(jessError);
190
- // Ensure lines are extracted
191
- if (!diagnostic.lines) {
192
- diagnostic.lines = extractRelevantLines(source, line);
193
- }
194
- if ('errors' in diagnostic) {
195
- errors.push(diagnostic);
196
- }
197
- else {
198
- warnings.push(diagnostic);
199
- }
200
- }
201
- // Convert lexer errors
202
- if (parseResult.lexerResult?.errors) {
203
- for (const lexError of parseResult.lexerResult.errors) {
204
- const line = lexError.line ?? 1;
205
- const jessError = getErrorFromParser([], [lexError], filePath, source, { file: context.file });
206
- const diagnostic = toDiagnostic(jessError);
207
- // Ensure lines are extracted
208
- if (!diagnostic.lines) {
209
- diagnostic.lines = extractRelevantLines(source, line);
210
- }
211
- if ('errors' in diagnostic) {
212
- errors.push(diagnostic);
213
- }
214
- else {
215
- warnings.push(diagnostic);
216
- }
217
- }
218
- }
219
- }
220
- }
221
- catch (error) {
222
- // Convert caught error to diagnostic
223
- if (error && typeof error === 'object' && 'severity' in error) {
224
- const diagnostic = toDiagnostic(error);
225
- if ('errors' in diagnostic) {
226
- errors.push(diagnostic);
227
- }
228
- else {
229
- warnings.push(diagnostic);
230
- }
231
- }
232
- else {
233
- errors.push({
234
- code: 'internal/unknown',
235
- phase: 'parse',
236
- message: error?.message || 'Unknown parsing error',
237
- reason: error?.message || 'An unexpected error occurred during parsing.',
238
- fix: 'Check the file syntax and ensure it is valid.',
239
- file: context.file,
240
- filePath: filePath,
241
- line: 1,
242
- column: 1,
243
- lines: extractRelevantLines(source, 1)
244
- });
245
- }
246
- // Return with errors/warnings only (no tree)
247
- return { errors, warnings };
248
- }
249
- // Only register functions if parsing succeeded without errors
250
- if (tree && errors.length === 0) {
251
- this._registerFunctions(tree);
252
- }
253
- return {
254
- tree,
255
- errors,
256
- warnings
257
- };
258
- }
259
- }
1
+ import { createRequire } from "node:module";
2
+ import { AbstractPlugin, JessError, JsFunction, TreeContext, extractRelevantLines, getErrorFromParser, toDiagnostic } from "@jesscss/core";
3
+ import * as lessFunctions from "@jesscss/fns";
4
+ import { Parser } from "@jesscss/less-parser/jess";
5
+ import path from "node:path";
6
+ import { expandLessImportCandidates } from "@jesscss/style-resolver";
7
+ //#region src/index.ts
8
+ /**
9
+ * The Less plugin's default option values — the single source of truth for the
10
+ * v5 defaults. The `LessPlugin` constructor fills any unset option from here,
11
+ * and the `lessc` CLI imports the same object so its defaults can never drift
12
+ * from the engine's. Note `collapseNesting: false` — v5 preserves nesting by
13
+ * default (Less 4.x flattened; that is now an explicit opt-in).
14
+ */
15
+ const lessPluginDefaults = {
16
+ mathMode: "parens-division",
17
+ unitMode: "preserve",
18
+ equalityMode: "less",
19
+ leakyScope: true,
20
+ bubbleRootAtRules: true,
21
+ collapseNesting: false
22
+ };
23
+ var LessPlugin = class extends AbstractPlugin {
24
+ name = "less";
25
+ supportedExtensions = [".less"];
26
+ parser;
27
+ mathMode;
28
+ unitMode;
29
+ equalityMode;
30
+ leakyScope;
31
+ bubbleRootAtRules;
32
+ collapseNesting;
33
+ constructor(opts = {}) {
34
+ super();
35
+ this.opts = opts;
36
+ let mathMode;
37
+ if (opts.mathMode !== void 0) mathMode = opts.mathMode;
38
+ else if (opts.math !== void 0) if (opts.math === 0 || opts.math === "always") mathMode = "always";
39
+ else if (opts.math === 1 || opts.math === "parens-division") mathMode = "parens-division";
40
+ else if (opts.math === 2 || opts.math === "parens" || opts.math === "strict") mathMode = "parens";
41
+ else mathMode = "parens";
42
+ else mathMode = lessPluginDefaults.mathMode;
43
+ this.mathMode = mathMode;
44
+ let unitMode;
45
+ if (opts.unitMode !== void 0) unitMode = opts.unitMode;
46
+ else if (opts.strictUnits === true) unitMode = "strict";
47
+ else unitMode = lessPluginDefaults.unitMode;
48
+ this.unitMode = unitMode;
49
+ this.equalityMode = opts.equalityMode ?? lessPluginDefaults.equalityMode;
50
+ this.leakyScope = opts.leakyScope ?? lessPluginDefaults.leakyScope;
51
+ this.bubbleRootAtRules = opts.bubbleRootAtRules ?? lessPluginDefaults.bubbleRootAtRules;
52
+ this.collapseNesting = opts.collapseNesting ?? lessPluginDefaults.collapseNesting;
53
+ this.parser = new Parser();
54
+ }
55
+ createTreeContext(filePath, source) {
56
+ return new TreeContext({
57
+ file: {
58
+ name: path.basename(filePath),
59
+ path: path.dirname(filePath),
60
+ fullPath: filePath,
61
+ source
62
+ },
63
+ mathMode: this.mathMode,
64
+ unitMode: this.unitMode,
65
+ equalityMode: this.equalityMode,
66
+ plugin: this,
67
+ allowExtendSelectors: this.opts.allowExtendSelectors,
68
+ collapseNesting: this.collapseNesting,
69
+ leakyScope: this.leakyScope,
70
+ bubbleRootAtRules: this.bubbleRootAtRules
71
+ });
72
+ }
73
+ _registerFunctions(tree) {
74
+ const registeredNames = [];
75
+ for (const [key, value] of Object.entries(lessFunctions)) {
76
+ if (typeof value !== "function") continue;
77
+ const runtimeName = value.name || key;
78
+ tree.setFunctionBinding(runtimeName, new JsFunction({
79
+ name: runtimeName,
80
+ fn: value
81
+ }));
82
+ registeredNames.push(runtimeName);
83
+ }
84
+ }
85
+ expandImport(importPath, currentDir) {
86
+ return expandLessImportCandidates(importPath);
87
+ }
88
+ resolve(filePath, currentDir, searchPaths) {
89
+ const mapped = (Array.isArray(filePath) ? filePath : [filePath]).map((candidate) => {
90
+ if (candidate.startsWith("@less/test-import-module/")) {
91
+ const after = candidate.slice(25);
92
+ const marker = `${path.sep}packages${path.sep}test-data${path.sep}`;
93
+ const idx = currentDir.indexOf(marker);
94
+ if (idx !== -1) {
95
+ const packagesRoot = currentDir.slice(0, idx + `${path.sep}packages`.length);
96
+ return path.join(packagesRoot, "test-import-module", after);
97
+ }
98
+ }
99
+ const m = candidate.match(/^https?:\/\/cdn\.jsdelivr\.net\/npm\/([^?#]+)(?:[?#].*)?$/i);
100
+ if (m?.[1]) return m[1];
101
+ const mProtocolRelative = candidate.match(/^\/\/cdn\.jsdelivr\.net\/npm\/([^?#]+)(?:[?#].*)?$/i);
102
+ if (mProtocolRelative?.[1]) return mProtocolRelative[1];
103
+ return candidate;
104
+ });
105
+ const out = [...super.resolve(mapped, currentDir, searchPaths)];
106
+ const bases = [
107
+ currentDir,
108
+ ...searchPaths,
109
+ process.cwd()
110
+ ];
111
+ const looksBareSpecifier = (p) => !path.isAbsolute(p) && !p.startsWith("./") && !p.startsWith("../") && !p.startsWith("/") && !/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(p);
112
+ for (const candidate of mapped) {
113
+ if (!looksBareSpecifier(candidate)) continue;
114
+ for (const base of bases) {
115
+ const baseDir = path.isAbsolute(base) ? base : path.resolve(currentDir, base);
116
+ try {
117
+ const resolvedModule = createRequire(path.join(baseDir, "__jess_resolve__.js")).resolve(candidate);
118
+ if (!out.includes(resolvedModule)) out.push(resolvedModule);
119
+ break;
120
+ } catch {
121
+ try {
122
+ const resolvedModuleLess = createRequire(path.join(baseDir, "__jess_resolve__.js")).resolve(`${candidate}.less`);
123
+ if (!out.includes(resolvedModuleLess)) out.push(resolvedModuleLess);
124
+ break;
125
+ } catch {}
126
+ }
127
+ }
128
+ }
129
+ return out;
130
+ }
131
+ safeParse(filePath, source, _parseOptions) {
132
+ const context = this.createTreeContext(filePath, source);
133
+ const errors = [];
134
+ const warnings = [];
135
+ let tree;
136
+ try {
137
+ const parseResult = this.parser.parse(source, "Stylesheet", { context });
138
+ tree = parseResult.tree;
139
+ const parsedContext = parseResult.context ?? context;
140
+ if (tree) tree._treeContext = parsedContext;
141
+ context.opts.trivia = parseResult.trivia;
142
+ context.opts.liftedCommentRanges = parseResult.liftedCommentRanges;
143
+ if ("warnings" in parseResult && parseResult.warnings) for (const warning of parseResult.warnings) {
144
+ const line = warning.token?.startLine ?? 1;
145
+ const column = warning.token?.startColumn ?? 1;
146
+ warnings.push({
147
+ code: "parse/deprecated",
148
+ phase: "parse",
149
+ message: warning.message,
150
+ reason: warning.message,
151
+ fix: "Update your code to use the recommended syntax.",
152
+ file: context.file,
153
+ filePath,
154
+ line,
155
+ column,
156
+ lines: extractRelevantLines(source, line)
157
+ });
158
+ }
159
+ if (parseResult.errors.length) for (const error of parseResult.errors) {
160
+ const line = error.token?.startLine ?? 1;
161
+ const diagnostic = toDiagnostic(getErrorFromParser([error], void 0, filePath, source, { file: context.file }));
162
+ if (!diagnostic.lines) diagnostic.lines = extractRelevantLines(source, line);
163
+ if ("errors" in diagnostic) errors.push(diagnostic);
164
+ else warnings.push(diagnostic);
165
+ }
166
+ } catch (error) {
167
+ if (error instanceof JessError) {
168
+ const diagnostic = toDiagnostic(error);
169
+ if ("errors" in diagnostic) errors.push(diagnostic);
170
+ else warnings.push(diagnostic);
171
+ } else {
172
+ const message = error instanceof Error ? error.message : "Unknown parsing error";
173
+ errors.push({
174
+ code: "internal/unknown",
175
+ phase: "parse",
176
+ message,
177
+ reason: message || "An unexpected error occurred during parsing.",
178
+ fix: "Check the file syntax and ensure it is valid.",
179
+ file: context.file,
180
+ filePath,
181
+ line: 1,
182
+ column: 1,
183
+ lines: extractRelevantLines(source, 1)
184
+ });
185
+ }
186
+ return {
187
+ errors,
188
+ warnings
189
+ };
190
+ }
191
+ if (tree && errors.length === 0) this._registerFunctions(tree);
192
+ return {
193
+ tree,
194
+ errors,
195
+ warnings
196
+ };
197
+ }
198
+ };
260
199
  const lessPlugin = ((opts) => {
261
- return new LessPlugin(opts);
200
+ return new LessPlugin(opts);
262
201
  });
263
- export default lessPlugin;
264
- //# sourceMappingURL=index.js.map
202
+ //#endregion
203
+ export { LessPlugin, lessPlugin as default, lessPluginDefaults };
package/package.json CHANGED
@@ -1,22 +1,18 @@
1
1
  {
2
2
  "name": "@jesscss/plugin-less",
3
+ "type": "module",
3
4
  "publishConfig": {
4
5
  "access": "public"
5
6
  },
6
7
  "description": "A Less stylesheet engine for Jess",
7
- "version": "2.0.0-alpha.5",
8
- "main": "lib/index.js",
8
+ "version": "2.0.0-alpha.7",
9
+ "main": "lib/index.cjs",
9
10
  "types": "lib/index.d.ts",
10
11
  "exports": {
11
12
  ".": {
12
- "import": "./lib/index.js",
13
13
  "types": "./lib/index.d.ts",
14
- "source": "./src/index.ts"
15
- },
16
- "./*": {
17
- "types": "./lib/*.d.ts",
18
- "import": "./lib/*.js",
19
- "source": "./src/*.ts"
14
+ "import": "./lib/index.js",
15
+ "require": "./lib/index.cjs"
20
16
  },
21
17
  "./package.json": "./package.json"
22
18
  },
@@ -24,11 +20,11 @@
24
20
  "lib"
25
21
  ],
26
22
  "dependencies": {
27
- "@jesscss/core": "2.0.0-alpha.5",
28
- "@jesscss/fns": "2.0.0-alpha.5",
29
- "@jesscss/less-parser": "2.0.0-alpha.5",
30
- "@jesscss/style-resolver": "2.0.0-alpha.5",
31
- "styles-config": "2.0.0-alpha.5"
23
+ "@jesscss/core": "2.0.0-alpha.7",
24
+ "@jesscss/fns": "2.0.0-alpha.7",
25
+ "@jesscss/less-parser": "2.0.0-alpha.7",
26
+ "@jesscss/style-resolver": "2.0.0-alpha.7",
27
+ "styles-config": "2.0.0-alpha.7"
32
28
  },
33
29
  "devDependencies": {},
34
30
  "author": "Matthew Dean <matthew-dean@users.noreply.github.com>",
@@ -37,10 +33,11 @@
37
33
  "url": "https://github.com/jesscss/jess/issues"
38
34
  },
39
35
  "homepage": "https://github.com/jesscss/jess#readme",
36
+ "module": "lib/index.js",
40
37
  "scripts": {
41
38
  "ci": "pnpm build && pnpm test",
42
39
  "build": "pnpm compile",
43
- "compile": "tsc -b tsconfig.build.json",
40
+ "compile": "tsdown --tsconfig tsconfig.build.json --no-dts && tsc -p tsconfig.build.json --emitDeclarationOnly --noCheck",
44
41
  "test": "vitest --run --passWithNoTests",
45
42
  "lint:fix": "eslint --fix '**/*.{js,ts}'",
46
43
  "lint": "eslint '**/*.{js,ts}'"
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/options.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=options.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":""}