@jesscss/style-resolver 2.0.0-alpha.5 → 2.0.0-alpha.6
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 +122 -0
- package/lib/index.d.cts +35 -0
- package/lib/index.js +87 -128
- package/package.json +8 -6
- package/lib/index.js.map +0 -1
package/lib/index.cjs
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
//#region \0rolldown/runtime.js
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
11
|
+
key = keys[i];
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
|
+
get: ((k) => from[k]).bind(null, key),
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
20
|
+
value: mod,
|
|
21
|
+
enumerable: true
|
|
22
|
+
}) : target, mod));
|
|
23
|
+
//#endregion
|
|
24
|
+
let node_path = require("node:path");
|
|
25
|
+
node_path = __toESM(node_path);
|
|
26
|
+
//#region src/index.ts
|
|
27
|
+
function uniq(items) {
|
|
28
|
+
const out = [];
|
|
29
|
+
const seen = /* @__PURE__ */ new Set();
|
|
30
|
+
for (const it of items) {
|
|
31
|
+
if (seen.has(it)) continue;
|
|
32
|
+
seen.add(it);
|
|
33
|
+
out.push(it);
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
function stripQueryHash(input) {
|
|
38
|
+
const m = input.match(/^([^?#]+)([?#].*)?$/);
|
|
39
|
+
return {
|
|
40
|
+
filePart: m?.[1] ?? input,
|
|
41
|
+
suffix: m?.[2] ?? ""
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function extractImports(sourceText, lang) {
|
|
45
|
+
const out = [];
|
|
46
|
+
const re = /@(import|use)\s*(?:\(([^)]*)\)\s*)*(?:url\(\s*)?(?:'([^']+)'|"([^"]+)")/g;
|
|
47
|
+
for (let m; m = re.exec(sourceText);) {
|
|
48
|
+
const optionsRaw = m[2] ?? "";
|
|
49
|
+
const options = optionsRaw ? optionsRaw.split(",").map((s) => s.trim()).filter(Boolean) : void 0;
|
|
50
|
+
const spec = m[3] ?? m[4] ?? "";
|
|
51
|
+
if (!spec) continue;
|
|
52
|
+
const startInMatch = m[3] != null ? m[0].indexOf(m[3]) : m[0].indexOf(m[4] ?? "");
|
|
53
|
+
const startOffset = m.index + startInMatch;
|
|
54
|
+
const endOffset = startOffset + spec.length;
|
|
55
|
+
out.push({
|
|
56
|
+
lang,
|
|
57
|
+
specifier: spec,
|
|
58
|
+
options,
|
|
59
|
+
specifierRange: {
|
|
60
|
+
startOffset,
|
|
61
|
+
endOffset
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
function expandLessImportCandidates(importPath) {
|
|
68
|
+
if (node_path.extname(importPath) !== ".less") return [`${importPath}.less`, `${importPath}`];
|
|
69
|
+
return [importPath];
|
|
70
|
+
}
|
|
71
|
+
function expandScssImportCandidates(importPath) {
|
|
72
|
+
const ext = node_path.extname(importPath);
|
|
73
|
+
const base = ext ? importPath.slice(0, -ext.length) : importPath;
|
|
74
|
+
const candidates = [];
|
|
75
|
+
const pushUnique = (p) => {
|
|
76
|
+
if (!candidates.includes(p)) candidates.push(p);
|
|
77
|
+
};
|
|
78
|
+
const withExt = (p) => p.endsWith(".scss") ? p : `${p}.scss`;
|
|
79
|
+
if (ext) {
|
|
80
|
+
pushUnique(importPath);
|
|
81
|
+
const dir = node_path.dirname(importPath);
|
|
82
|
+
const file = node_path.basename(importPath);
|
|
83
|
+
if (!file.startsWith("_")) pushUnique(node_path.join(dir, `_${file}`));
|
|
84
|
+
return candidates;
|
|
85
|
+
}
|
|
86
|
+
pushUnique(withExt(base));
|
|
87
|
+
pushUnique(withExt(node_path.join(node_path.dirname(base), `_${node_path.basename(base)}`)));
|
|
88
|
+
pushUnique(withExt(node_path.join(base, "index")));
|
|
89
|
+
pushUnique(withExt(node_path.join(base, "_index")));
|
|
90
|
+
return candidates;
|
|
91
|
+
}
|
|
92
|
+
function resolveImport(fs, opts) {
|
|
93
|
+
const specifier = opts.specifier.trim();
|
|
94
|
+
if (!specifier) return null;
|
|
95
|
+
if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(specifier) || specifier.startsWith("data:")) return null;
|
|
96
|
+
const { filePart, suffix } = stripQueryHash(specifier);
|
|
97
|
+
const fromDir = node_path.dirname(opts.fromFilePath);
|
|
98
|
+
const cfg = opts.config ?? {};
|
|
99
|
+
const searchPaths = [fromDir];
|
|
100
|
+
if (opts.lang === "less" && Array.isArray(cfg.includePaths)) searchPaths.push(...cfg.includePaths);
|
|
101
|
+
if (opts.lang === "scss" && Array.isArray(cfg.loadPaths)) searchPaths.push(...cfg.loadPaths);
|
|
102
|
+
if (cfg.rootDir) searchPaths.push(cfg.rootDir);
|
|
103
|
+
const candidatesRel = opts.lang === "less" ? expandLessImportCandidates(filePart) : opts.lang === "scss" ? expandScssImportCandidates(filePart) : [filePart.endsWith(".css") ? filePart : `${filePart}.css`, filePart];
|
|
104
|
+
const candidatesAbs = [];
|
|
105
|
+
for (const baseDir of uniq(searchPaths)) for (const rel of candidatesRel) {
|
|
106
|
+
const abs = node_path.resolve(baseDir, rel);
|
|
107
|
+
candidatesAbs.push({
|
|
108
|
+
p: abs,
|
|
109
|
+
resolvedBy: baseDir === fromDir ? "exact" : "loadPath"
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
for (const c of candidatesAbs) if (fs.exists(c.p)) return {
|
|
113
|
+
filePath: c.p + suffix,
|
|
114
|
+
resolvedBy: c.resolvedBy
|
|
115
|
+
};
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
//#endregion
|
|
119
|
+
exports.expandLessImportCandidates = expandLessImportCandidates;
|
|
120
|
+
exports.expandScssImportCandidates = expandScssImportCandidates;
|
|
121
|
+
exports.extractImports = extractImports;
|
|
122
|
+
exports.resolveImport = resolveImport;
|
package/lib/index.d.cts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/index.d.ts
|
|
2
|
+
type StyleLang = 'css' | 'less' | 'scss' | 'jess';
|
|
3
|
+
type FsLike = {
|
|
4
|
+
exists(filePath: string): boolean;
|
|
5
|
+
};
|
|
6
|
+
type StylesConfig = {
|
|
7
|
+
/** Project root; used as an optional search base. */rootDir?: string; /** Less-style include paths. */
|
|
8
|
+
includePaths?: string[]; /** SCSS-style load paths. */
|
|
9
|
+
loadPaths?: string[];
|
|
10
|
+
};
|
|
11
|
+
type ImportStatement = {
|
|
12
|
+
lang: StyleLang;
|
|
13
|
+
specifier: string;
|
|
14
|
+
options?: string[];
|
|
15
|
+
specifierRange: {
|
|
16
|
+
startOffset: number;
|
|
17
|
+
endOffset: number;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
type ResolveResult = {
|
|
21
|
+
filePath: string;
|
|
22
|
+
resolvedBy: 'exact' | 'extension' | 'partial' | 'index' | 'loadPath';
|
|
23
|
+
};
|
|
24
|
+
type ResolveImportOptions = {
|
|
25
|
+
lang: StyleLang;
|
|
26
|
+
fromFilePath: string;
|
|
27
|
+
specifier: string;
|
|
28
|
+
config?: StylesConfig;
|
|
29
|
+
};
|
|
30
|
+
declare function extractImports(sourceText: string, lang: StyleLang): ImportStatement[];
|
|
31
|
+
declare function expandLessImportCandidates(importPath: string): string[];
|
|
32
|
+
declare function expandScssImportCandidates(importPath: string): string[];
|
|
33
|
+
declare function resolveImport(fs: FsLike, opts: ResolveImportOptions): ResolveResult | null;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { FsLike, ImportStatement, ResolveImportOptions, ResolveResult, StyleLang, StylesConfig, expandLessImportCandidates, expandScssImportCandidates, extractImports, resolveImport };
|
package/lib/index.js
CHANGED
|
@@ -1,136 +1,95 @@
|
|
|
1
|
-
import * as path from
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
//#region src/index.ts
|
|
2
3
|
function uniq(items) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
return out;
|
|
4
|
+
const out = [];
|
|
5
|
+
const seen = /* @__PURE__ */ new Set();
|
|
6
|
+
for (const it of items) {
|
|
7
|
+
if (seen.has(it)) continue;
|
|
8
|
+
seen.add(it);
|
|
9
|
+
out.push(it);
|
|
10
|
+
}
|
|
11
|
+
return out;
|
|
13
12
|
}
|
|
14
13
|
function stripQueryHash(input) {
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
const m = input.match(/^([^?#]+)([?#].*)?$/);
|
|
15
|
+
return {
|
|
16
|
+
filePart: m?.[1] ?? input,
|
|
17
|
+
suffix: m?.[2] ?? ""
|
|
18
|
+
};
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const startOffset = m.index + startInMatch;
|
|
41
|
-
const endOffset = startOffset + spec.length;
|
|
42
|
-
out.push({
|
|
43
|
-
lang,
|
|
44
|
-
specifier: spec,
|
|
45
|
-
options,
|
|
46
|
-
specifierRange: { startOffset, endOffset }
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
return out;
|
|
20
|
+
function extractImports(sourceText, lang) {
|
|
21
|
+
const out = [];
|
|
22
|
+
const re = /@(import|use)\s*(?:\(([^)]*)\)\s*)*(?:url\(\s*)?(?:'([^']+)'|"([^"]+)")/g;
|
|
23
|
+
for (let m; m = re.exec(sourceText);) {
|
|
24
|
+
const optionsRaw = m[2] ?? "";
|
|
25
|
+
const options = optionsRaw ? optionsRaw.split(",").map((s) => s.trim()).filter(Boolean) : void 0;
|
|
26
|
+
const spec = m[3] ?? m[4] ?? "";
|
|
27
|
+
if (!spec) continue;
|
|
28
|
+
const startInMatch = m[3] != null ? m[0].indexOf(m[3]) : m[0].indexOf(m[4] ?? "");
|
|
29
|
+
const startOffset = m.index + startInMatch;
|
|
30
|
+
const endOffset = startOffset + spec.length;
|
|
31
|
+
out.push({
|
|
32
|
+
lang,
|
|
33
|
+
specifier: spec,
|
|
34
|
+
options,
|
|
35
|
+
specifierRange: {
|
|
36
|
+
startOffset,
|
|
37
|
+
endOffset
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
50
42
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
export function expandLessImportCandidates(importPath) {
|
|
55
|
-
const ext = path.extname(importPath);
|
|
56
|
-
if (ext !== '.less') {
|
|
57
|
-
return [`${importPath}.less`, `${importPath}`];
|
|
58
|
-
}
|
|
59
|
-
return [importPath];
|
|
43
|
+
function expandLessImportCandidates(importPath) {
|
|
44
|
+
if (path.extname(importPath) !== ".less") return [`${importPath}.less`, `${importPath}`];
|
|
45
|
+
return [importPath];
|
|
60
46
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
pushUnique(importPath);
|
|
82
|
-
const dir = path.dirname(importPath);
|
|
83
|
-
const file = path.basename(importPath);
|
|
84
|
-
if (!file.startsWith('_')) {
|
|
85
|
-
pushUnique(path.join(dir, `_${file}`));
|
|
86
|
-
}
|
|
87
|
-
return candidates;
|
|
88
|
-
}
|
|
89
|
-
pushUnique(withExt(base));
|
|
90
|
-
pushUnique(withExt(path.join(path.dirname(base), `_${path.basename(base)}`)));
|
|
91
|
-
pushUnique(withExt(path.join(base, 'index')));
|
|
92
|
-
pushUnique(withExt(path.join(base, '_index')));
|
|
93
|
-
return candidates;
|
|
47
|
+
function expandScssImportCandidates(importPath) {
|
|
48
|
+
const ext = path.extname(importPath);
|
|
49
|
+
const base = ext ? importPath.slice(0, -ext.length) : importPath;
|
|
50
|
+
const candidates = [];
|
|
51
|
+
const pushUnique = (p) => {
|
|
52
|
+
if (!candidates.includes(p)) candidates.push(p);
|
|
53
|
+
};
|
|
54
|
+
const withExt = (p) => p.endsWith(".scss") ? p : `${p}.scss`;
|
|
55
|
+
if (ext) {
|
|
56
|
+
pushUnique(importPath);
|
|
57
|
+
const dir = path.dirname(importPath);
|
|
58
|
+
const file = path.basename(importPath);
|
|
59
|
+
if (!file.startsWith("_")) pushUnique(path.join(dir, `_${file}`));
|
|
60
|
+
return candidates;
|
|
61
|
+
}
|
|
62
|
+
pushUnique(withExt(base));
|
|
63
|
+
pushUnique(withExt(path.join(path.dirname(base), `_${path.basename(base)}`)));
|
|
64
|
+
pushUnique(withExt(path.join(base, "index")));
|
|
65
|
+
pushUnique(withExt(path.join(base, "_index")));
|
|
66
|
+
return candidates;
|
|
94
67
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
? expandScssImportCandidates(filePart)
|
|
121
|
-
: [filePart.endsWith('.css') ? filePart : `${filePart}.css`, filePart];
|
|
122
|
-
const candidatesAbs = [];
|
|
123
|
-
for (const baseDir of uniq(searchPaths)) {
|
|
124
|
-
for (const rel of candidatesRel) {
|
|
125
|
-
const abs = path.resolve(baseDir, rel);
|
|
126
|
-
candidatesAbs.push({ p: abs, resolvedBy: baseDir === fromDir ? 'exact' : 'loadPath' });
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
for (const c of candidatesAbs) {
|
|
130
|
-
if (fs.exists(c.p)) {
|
|
131
|
-
return { filePath: c.p + suffix, resolvedBy: c.resolvedBy };
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return null;
|
|
68
|
+
function resolveImport(fs, opts) {
|
|
69
|
+
const specifier = opts.specifier.trim();
|
|
70
|
+
if (!specifier) return null;
|
|
71
|
+
if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(specifier) || specifier.startsWith("data:")) return null;
|
|
72
|
+
const { filePart, suffix } = stripQueryHash(specifier);
|
|
73
|
+
const fromDir = path.dirname(opts.fromFilePath);
|
|
74
|
+
const cfg = opts.config ?? {};
|
|
75
|
+
const searchPaths = [fromDir];
|
|
76
|
+
if (opts.lang === "less" && Array.isArray(cfg.includePaths)) searchPaths.push(...cfg.includePaths);
|
|
77
|
+
if (opts.lang === "scss" && Array.isArray(cfg.loadPaths)) searchPaths.push(...cfg.loadPaths);
|
|
78
|
+
if (cfg.rootDir) searchPaths.push(cfg.rootDir);
|
|
79
|
+
const candidatesRel = opts.lang === "less" ? expandLessImportCandidates(filePart) : opts.lang === "scss" ? expandScssImportCandidates(filePart) : [filePart.endsWith(".css") ? filePart : `${filePart}.css`, filePart];
|
|
80
|
+
const candidatesAbs = [];
|
|
81
|
+
for (const baseDir of uniq(searchPaths)) for (const rel of candidatesRel) {
|
|
82
|
+
const abs = path.resolve(baseDir, rel);
|
|
83
|
+
candidatesAbs.push({
|
|
84
|
+
p: abs,
|
|
85
|
+
resolvedBy: baseDir === fromDir ? "exact" : "loadPath"
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
for (const c of candidatesAbs) if (fs.exists(c.p)) return {
|
|
89
|
+
filePath: c.p + suffix,
|
|
90
|
+
resolvedBy: c.resolvedBy
|
|
91
|
+
};
|
|
92
|
+
return null;
|
|
135
93
|
}
|
|
136
|
-
//#
|
|
94
|
+
//#endregion
|
|
95
|
+
export { expandLessImportCandidates, expandScssImportCandidates, extractImports, resolveImport };
|
package/package.json
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jesscss/style-resolver",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.6",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
7
|
"type": "module",
|
|
8
|
-
"main": "lib/index.
|
|
8
|
+
"main": "lib/index.cjs",
|
|
9
9
|
"types": "lib/index.d.ts",
|
|
10
10
|
"exports": {
|
|
11
11
|
".": {
|
|
12
|
-
"import": "./lib/index.js",
|
|
13
12
|
"types": "./lib/index.d.ts",
|
|
14
|
-
"source": "./src/index.ts"
|
|
13
|
+
"source": "./src/index.ts",
|
|
14
|
+
"import": "./lib/index.js",
|
|
15
|
+
"require": "./lib/index.cjs"
|
|
15
16
|
}
|
|
16
17
|
},
|
|
17
18
|
"files": [
|
|
@@ -19,11 +20,12 @@
|
|
|
19
20
|
],
|
|
20
21
|
"devDependencies": {
|
|
21
22
|
"typescript": "~5.8.2",
|
|
22
|
-
"vitest": "^
|
|
23
|
+
"vitest": "^4.1.0"
|
|
23
24
|
},
|
|
25
|
+
"module": "lib/index.js",
|
|
24
26
|
"scripts": {
|
|
25
27
|
"build": "pnpm compile",
|
|
26
|
-
"compile": "tsc -p tsconfig.build.json",
|
|
28
|
+
"compile": "tsdown --tsconfig tsconfig.build.json && tsc -p tsconfig.build.json --emitDeclarationOnly",
|
|
27
29
|
"test": "vitest --watch=false",
|
|
28
30
|
"lint": "eslint '**/*.{js,ts}'"
|
|
29
31
|
}
|
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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"}
|