mikuru 1.0.24 → 1.0.25
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/CHANGELOG.md +4 -1
- package/dist/compiler/compile.js +11 -0
- package/dist/compiler/compile.js.map +1 -1
- package/dist/compiler/css.d.ts +19 -0
- package/dist/compiler/css.js +420 -0
- package/dist/compiler/css.js.map +1 -0
- package/dist/compiler/generate.js +9 -26
- package/dist/compiler/generate.js.map +1 -1
- package/dist/compiler/index.d.ts +2 -0
- package/dist/compiler/index.js +1 -0
- package/dist/compiler/index.js.map +1 -1
- package/dist/runtime/devtools.d.ts +5 -0
- package/dist/runtime/devtools.js +15 -0
- package/dist/runtime/devtools.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 1.0.
|
|
3
|
+
## 1.0.25 - 2026-05-15
|
|
4
4
|
|
|
5
5
|
- Added Mikuru-native `m-*` directive syntax across DOM rendering, SSR, and hydration while keeping `v-*` as compatibility aliases.
|
|
6
6
|
- Added debug compiler warnings for `v-*` compatibility aliases, pointing users to the matching `m-*` directive spelling.
|
|
7
7
|
- Updated README, docs, examples, and templates to present `m-*` as the recommended directive syntax.
|
|
8
8
|
- Added shared Debug Inspector diagnostic payloads for compiler, runtime, router, SSR, and hydration warning/error events.
|
|
9
|
+
- Expanded the dogfood Debug Panel with a searchable and collapsible component tree, component root reveal, event filters/search, event-to-component navigation, and copyable compact debug snapshots.
|
|
10
|
+
- Split dogfood Debug Panel filtering, tree, formatting, and snapshot logic into tested example helpers while documenting that they are not public package exports.
|
|
11
|
+
- Improved scoped CSS rewriting coverage for complex selectors, nested at-rules, comments, strings, and malformed CSS diagnostics.
|
|
9
12
|
- Added support for `<template m-if>` / `<template m-else-if>` / `<template m-else>` fragment branches across DOM rendering, SSR, and hydration.
|
|
10
13
|
- Added support for keyed `<template m-for>` fragment rows across DOM rendering, SSR, and hydration.
|
|
11
14
|
- Expanded `<template m-for>` coverage for unkeyed fragments, nested fragment loops, and nested `m-if` / `m-else` branches.
|
package/dist/compiler/compile.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { analyzeTemplate } from "./analyzeTemplate.js";
|
|
2
2
|
import { emitCompatDirectiveDiagnostics } from "./compatDiagnostics.js";
|
|
3
|
+
import { compileDescriptorStyle } from "./css.js";
|
|
3
4
|
import { generate } from "./generate.js";
|
|
4
5
|
import { parseSfc } from "./parseSfc.js";
|
|
5
6
|
import { parseTemplate } from "./parseTemplate.js";
|
|
@@ -14,6 +15,16 @@ export function compile(source, options = {}) {
|
|
|
14
15
|
offset: descriptor.templateOffset
|
|
15
16
|
});
|
|
16
17
|
emitCompatDirectiveDiagnostics(ast, { debug: options.debug === true, filename: options.filename, phase: "compile" });
|
|
18
|
+
if (options.debug === true && descriptor.style?.trim()) {
|
|
19
|
+
const styleResult = compileDescriptorStyle(descriptor, descriptor.styleScoped ? `data-mikuru-scope-preview` : undefined);
|
|
20
|
+
for (const diagnostic of styleResult.diagnostics) {
|
|
21
|
+
emitDebugDiagnostic("compiler", diagnostic.level, diagnostic.message, {
|
|
22
|
+
phase: "style",
|
|
23
|
+
filename: options.filename,
|
|
24
|
+
offset: diagnostic.offset
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
17
28
|
const bindings = analyzeTemplate(ast, { source, filename: options.filename });
|
|
18
29
|
const code = generate(descriptor, ast, { debug: options.debug === true, batchedUpdates: options.batchedUpdates === true });
|
|
19
30
|
const map = createSourceMap(code, descriptor, ast);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,UAA0B,EAAE;IAClE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC7C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM;YACN,MAAM,EAAE,UAAU,CAAC,cAAc;SAClC,CAAC,CAAC;QACH,8BAA8B,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACrH,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3H,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAEnD,OAAO;YACL,IAAI;YACJ,GAAG;YACH,UAAU;YACV,GAAG;YACH,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC/F,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK;SACN,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,UAA0B,EAAE;IAClE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC7C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM;YACN,MAAM,EAAE,UAAU,CAAC,cAAc;SAClC,CAAC,CAAC;QACH,8BAA8B,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACrH,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;YACvD,MAAM,WAAW,GAAG,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACzH,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBACjD,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE;oBACpE,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3H,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAEnD,OAAO;YACL,IAAI;YACJ,GAAG;YACH,UAAU;YACV,GAAG;YACH,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC/F,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK;SACN,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SfcDescriptor } from "./types.js";
|
|
2
|
+
export type CssCompileDiagnostic = {
|
|
3
|
+
level: "warning";
|
|
4
|
+
message: string;
|
|
5
|
+
offset?: number;
|
|
6
|
+
};
|
|
7
|
+
export type CssCompileOptions = {
|
|
8
|
+
filename?: string;
|
|
9
|
+
scoped?: boolean;
|
|
10
|
+
scopeAttr?: string;
|
|
11
|
+
};
|
|
12
|
+
export type CssCompileResult = {
|
|
13
|
+
code: string;
|
|
14
|
+
scoped: boolean;
|
|
15
|
+
scopeAttr?: string;
|
|
16
|
+
diagnostics: CssCompileDiagnostic[];
|
|
17
|
+
};
|
|
18
|
+
export declare function compileStyle(css: string, options?: CssCompileOptions): CssCompileResult;
|
|
19
|
+
export declare function compileDescriptorStyle(descriptor: SfcDescriptor, scopeAttr?: string): CssCompileResult;
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
const nestedRuleAtRules = new Set(["media", "supports", "container", "layer", "scope"]);
|
|
2
|
+
const rawBlockAtRules = new Set(["keyframes", "-webkit-keyframes", "-moz-keyframes", "-o-keyframes", "font-face", "page", "property"]);
|
|
3
|
+
export function compileStyle(css, options = {}) {
|
|
4
|
+
const diagnostics = [];
|
|
5
|
+
const trimmed = css.trim();
|
|
6
|
+
const scoped = options.scoped === true && !!options.scopeAttr;
|
|
7
|
+
if (!scoped) {
|
|
8
|
+
return {
|
|
9
|
+
code: trimmed,
|
|
10
|
+
scoped: false,
|
|
11
|
+
diagnostics
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
code: scopeCss(trimmed, options.scopeAttr, diagnostics),
|
|
16
|
+
scoped: true,
|
|
17
|
+
scopeAttr: options.scopeAttr,
|
|
18
|
+
diagnostics
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function compileDescriptorStyle(descriptor, scopeAttr) {
|
|
22
|
+
return compileStyle(descriptor.style ?? "", {
|
|
23
|
+
filename: descriptor.filename,
|
|
24
|
+
scoped: descriptor.styleScoped === true,
|
|
25
|
+
scopeAttr
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function scopeCss(css, scopeAttr, diagnostics, offset = 0) {
|
|
29
|
+
let result = "";
|
|
30
|
+
let index = 0;
|
|
31
|
+
while (index < css.length) {
|
|
32
|
+
const openIndex = findNextTopLevelChar(css, "{", index);
|
|
33
|
+
if (openIndex === -1) {
|
|
34
|
+
result += css.slice(index);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
const closeIndex = findMatchingBrace(css, openIndex);
|
|
38
|
+
if (closeIndex === -1) {
|
|
39
|
+
diagnostics.push({
|
|
40
|
+
level: "warning",
|
|
41
|
+
message: "Could not scope a CSS rule because its block is missing a closing brace.",
|
|
42
|
+
offset: offset + openIndex
|
|
43
|
+
});
|
|
44
|
+
result += css.slice(index);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
const preludeStart = findPreludeStart(css, index, openIndex);
|
|
48
|
+
const beforePrelude = css.slice(index, preludeStart);
|
|
49
|
+
const prelude = css.slice(preludeStart, openIndex);
|
|
50
|
+
const body = css.slice(openIndex + 1, closeIndex);
|
|
51
|
+
const scopedRule = scopeRule(prelude, body, scopeAttr, diagnostics, offset + openIndex + 1);
|
|
52
|
+
result += beforePrelude + scopedRule;
|
|
53
|
+
index = closeIndex + 1;
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
function scopeRule(prelude, body, scopeAttr, diagnostics, bodyOffset) {
|
|
58
|
+
const trimmedPrelude = prelude.trim();
|
|
59
|
+
if (!trimmedPrelude) {
|
|
60
|
+
return `${prelude}{${body}}`;
|
|
61
|
+
}
|
|
62
|
+
if (trimmedPrelude.startsWith("@")) {
|
|
63
|
+
const atRuleName = readAtRuleName(trimmedPrelude);
|
|
64
|
+
if (nestedRuleAtRules.has(atRuleName)) {
|
|
65
|
+
return `${prelude}{${scopeCss(body, scopeAttr, diagnostics, bodyOffset)}}`;
|
|
66
|
+
}
|
|
67
|
+
if (rawBlockAtRules.has(atRuleName)) {
|
|
68
|
+
return `${prelude}{${body}}`;
|
|
69
|
+
}
|
|
70
|
+
return bodyContainsRules(body) ? `${prelude}{${scopeCss(body, scopeAttr, diagnostics, bodyOffset)}}` : `${prelude}{${body}}`;
|
|
71
|
+
}
|
|
72
|
+
return `${scopeSelectorList(prelude, scopeAttr)}{${body}}`;
|
|
73
|
+
}
|
|
74
|
+
function scopeSelectorList(selectorSource, scopeAttr) {
|
|
75
|
+
return splitSelectorList(selectorSource)
|
|
76
|
+
.map((selector) => scopeSingleSelector(selector, scopeAttr))
|
|
77
|
+
.join(",");
|
|
78
|
+
}
|
|
79
|
+
function scopeSingleSelector(selector, scopeAttr) {
|
|
80
|
+
const leading = selector.match(/^\s*/)?.[0] ?? "";
|
|
81
|
+
const trailing = selector.match(/\s*$/)?.[0] ?? "";
|
|
82
|
+
let body = selector.trim();
|
|
83
|
+
if (!body || body.includes(`[${scopeAttr}]`)) {
|
|
84
|
+
return selector;
|
|
85
|
+
}
|
|
86
|
+
if (isPureGlobalSelector(selector, "global")) {
|
|
87
|
+
body = unwrapFunctionalPseudo(body, "global");
|
|
88
|
+
return `${leading}${body}${trailing}`;
|
|
89
|
+
}
|
|
90
|
+
const globalMatch = findFunctionalPseudo(body, "global");
|
|
91
|
+
if (globalMatch) {
|
|
92
|
+
const prefix = body.slice(0, globalMatch.start).trimEnd();
|
|
93
|
+
const argument = globalMatch.argument.trim();
|
|
94
|
+
const suffix = body.slice(globalMatch.end).trimStart();
|
|
95
|
+
const scopedPrefix = prefix ? insertScopeAttribute(prefix, scopeAttr) : "";
|
|
96
|
+
return `${leading}${scopedPrefix}${scopedPrefix ? " " : ""}${argument}${suffix ? ` ${suffix}` : ""}${trailing}`;
|
|
97
|
+
}
|
|
98
|
+
const deepMatch = findFunctionalPseudo(body, "deep");
|
|
99
|
+
if (deepMatch) {
|
|
100
|
+
const prefix = body.slice(0, deepMatch.start).trimEnd();
|
|
101
|
+
const argument = deepMatch.argument.trim();
|
|
102
|
+
const suffix = body.slice(deepMatch.end).trimStart();
|
|
103
|
+
const scopedPrefix = prefix ? insertScopeAttribute(prefix, scopeAttr) : `[${scopeAttr}]`;
|
|
104
|
+
return `${leading}${scopedPrefix} ${argument}${suffix ? ` ${suffix}` : ""}${trailing}`;
|
|
105
|
+
}
|
|
106
|
+
return `${leading}${insertScopeAttribute(body, scopeAttr)}${trailing}`;
|
|
107
|
+
}
|
|
108
|
+
function insertScopeAttribute(selector, scopeAttr) {
|
|
109
|
+
const insertIndex = findScopeInsertIndex(selector);
|
|
110
|
+
if (insertIndex === -1) {
|
|
111
|
+
return `${selector}[${scopeAttr}]`;
|
|
112
|
+
}
|
|
113
|
+
return `${selector.slice(0, insertIndex)}[${scopeAttr}]${selector.slice(insertIndex)}`;
|
|
114
|
+
}
|
|
115
|
+
function findScopeInsertIndex(selector) {
|
|
116
|
+
let depth = 0;
|
|
117
|
+
let quote;
|
|
118
|
+
let lastCombinator = -1;
|
|
119
|
+
let firstPseudoInTarget = -1;
|
|
120
|
+
for (let index = 0; index < selector.length; index += 1) {
|
|
121
|
+
const char = selector[index];
|
|
122
|
+
const previous = selector[index - 1];
|
|
123
|
+
if (char === "\\") {
|
|
124
|
+
index += 1;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (quote) {
|
|
128
|
+
if (char === quote && previous !== "\\") {
|
|
129
|
+
quote = undefined;
|
|
130
|
+
}
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (char === "\"" || char === "'") {
|
|
134
|
+
quote = char;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (char === "(" || char === "[") {
|
|
138
|
+
depth += 1;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (char === ")" || char === "]") {
|
|
142
|
+
depth = Math.max(0, depth - 1);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (depth > 0) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (isCombinator(char)) {
|
|
149
|
+
lastCombinator = index;
|
|
150
|
+
firstPseudoInTarget = -1;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (char === ":" && index > lastCombinator && firstPseudoInTarget === -1) {
|
|
154
|
+
firstPseudoInTarget = index;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return firstPseudoInTarget === -1 ? selector.length : firstPseudoInTarget;
|
|
158
|
+
}
|
|
159
|
+
function splitSelectorList(selectorSource) {
|
|
160
|
+
const selectors = [];
|
|
161
|
+
let start = 0;
|
|
162
|
+
let depth = 0;
|
|
163
|
+
let quote;
|
|
164
|
+
for (let index = 0; index < selectorSource.length; index += 1) {
|
|
165
|
+
const char = selectorSource[index];
|
|
166
|
+
const previous = selectorSource[index - 1];
|
|
167
|
+
if (char === "\\") {
|
|
168
|
+
index += 1;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (quote) {
|
|
172
|
+
if (char === quote && previous !== "\\") {
|
|
173
|
+
quote = undefined;
|
|
174
|
+
}
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (char === "\"" || char === "'") {
|
|
178
|
+
quote = char;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (char === "(" || char === "[") {
|
|
182
|
+
depth += 1;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (char === ")" || char === "]") {
|
|
186
|
+
depth = Math.max(0, depth - 1);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (char === "," && depth === 0) {
|
|
190
|
+
selectors.push(selectorSource.slice(start, index));
|
|
191
|
+
start = index + 1;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
selectors.push(selectorSource.slice(start));
|
|
195
|
+
return selectors;
|
|
196
|
+
}
|
|
197
|
+
function unwrapFunctionalPseudo(selector, name) {
|
|
198
|
+
const match = findFunctionalPseudo(selector, name);
|
|
199
|
+
if (!match) {
|
|
200
|
+
return selector;
|
|
201
|
+
}
|
|
202
|
+
return `${selector.slice(0, match.start)}${match.argument}${selector.slice(match.end)}`;
|
|
203
|
+
}
|
|
204
|
+
function isPureGlobalSelector(selector, name) {
|
|
205
|
+
const match = findFunctionalPseudo(selector.trim(), name);
|
|
206
|
+
return match?.start === 0 && match.end === selector.trim().length;
|
|
207
|
+
}
|
|
208
|
+
function findFunctionalPseudo(selector, name) {
|
|
209
|
+
const token = `:${name}(`;
|
|
210
|
+
const start = selector.indexOf(token);
|
|
211
|
+
if (start === -1) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
const argumentStart = start + token.length;
|
|
215
|
+
const close = findMatchingParen(selector, argumentStart - 1);
|
|
216
|
+
if (close === -1) {
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
start,
|
|
221
|
+
end: close + 1,
|
|
222
|
+
argument: selector.slice(argumentStart, close)
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function findPreludeStart(css, searchStart, openIndex) {
|
|
226
|
+
let boundary = searchStart;
|
|
227
|
+
let quote;
|
|
228
|
+
let parenDepth = 0;
|
|
229
|
+
let bracketDepth = 0;
|
|
230
|
+
let inComment = false;
|
|
231
|
+
for (let index = searchStart; index < openIndex; index += 1) {
|
|
232
|
+
const char = css[index];
|
|
233
|
+
const next = css[index + 1];
|
|
234
|
+
const previous = css[index - 1];
|
|
235
|
+
if (char === "\\") {
|
|
236
|
+
index += 1;
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
if (inComment) {
|
|
240
|
+
if (char === "*" && next === "/") {
|
|
241
|
+
inComment = false;
|
|
242
|
+
index += 1;
|
|
243
|
+
}
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
if (char === "/" && next === "*") {
|
|
247
|
+
inComment = true;
|
|
248
|
+
index += 1;
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
if (quote) {
|
|
252
|
+
if (char === quote && previous !== "\\") {
|
|
253
|
+
quote = undefined;
|
|
254
|
+
}
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (char === "\"" || char === "'") {
|
|
258
|
+
quote = char;
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (char === "(") {
|
|
262
|
+
parenDepth += 1;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
if (char === ")") {
|
|
266
|
+
parenDepth = Math.max(0, parenDepth - 1);
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
if (char === "[") {
|
|
270
|
+
bracketDepth += 1;
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (char === "]") {
|
|
274
|
+
bracketDepth = Math.max(0, bracketDepth - 1);
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
if (char === "}" && parenDepth === 0 && bracketDepth === 0) {
|
|
278
|
+
boundary = index + 1;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return skipCssIgnorablePrefix(css, boundary, openIndex);
|
|
282
|
+
}
|
|
283
|
+
function skipCssIgnorablePrefix(css, start, end) {
|
|
284
|
+
let index = start;
|
|
285
|
+
while (index < end) {
|
|
286
|
+
while (index < end && /\s/.test(css[index])) {
|
|
287
|
+
index += 1;
|
|
288
|
+
}
|
|
289
|
+
if (css[index] === "/" && css[index + 1] === "*") {
|
|
290
|
+
const commentEnd = css.indexOf("*/", index + 2);
|
|
291
|
+
if (commentEnd === -1 || commentEnd + 2 > end) {
|
|
292
|
+
return start;
|
|
293
|
+
}
|
|
294
|
+
index = commentEnd + 2;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
return index;
|
|
300
|
+
}
|
|
301
|
+
function findNextTopLevelChar(source, target, start) {
|
|
302
|
+
let quote;
|
|
303
|
+
let parenDepth = 0;
|
|
304
|
+
let bracketDepth = 0;
|
|
305
|
+
let inComment = false;
|
|
306
|
+
for (let index = start; index < source.length; index += 1) {
|
|
307
|
+
const char = source[index];
|
|
308
|
+
const next = source[index + 1];
|
|
309
|
+
const previous = source[index - 1];
|
|
310
|
+
if (char === "\\") {
|
|
311
|
+
index += 1;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
if (inComment) {
|
|
315
|
+
if (char === "*" && next === "/") {
|
|
316
|
+
inComment = false;
|
|
317
|
+
index += 1;
|
|
318
|
+
}
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
if (char === "/" && next === "*") {
|
|
322
|
+
inComment = true;
|
|
323
|
+
index += 1;
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
if (quote) {
|
|
327
|
+
if (char === quote && previous !== "\\") {
|
|
328
|
+
quote = undefined;
|
|
329
|
+
}
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
if (char === "\"" || char === "'") {
|
|
333
|
+
quote = char;
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
if (char === "(") {
|
|
337
|
+
parenDepth += 1;
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
if (char === ")") {
|
|
341
|
+
parenDepth = Math.max(0, parenDepth - 1);
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
if (char === "[") {
|
|
345
|
+
bracketDepth += 1;
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
if (char === "]") {
|
|
349
|
+
bracketDepth = Math.max(0, bracketDepth - 1);
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
if (char === target && parenDepth === 0 && bracketDepth === 0) {
|
|
353
|
+
return index;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return -1;
|
|
357
|
+
}
|
|
358
|
+
function findMatchingBrace(source, openIndex) {
|
|
359
|
+
return findMatchingPair(source, openIndex, "{", "}");
|
|
360
|
+
}
|
|
361
|
+
function findMatchingParen(source, openIndex) {
|
|
362
|
+
return findMatchingPair(source, openIndex, "(", ")");
|
|
363
|
+
}
|
|
364
|
+
function findMatchingPair(source, openIndex, openChar, closeChar) {
|
|
365
|
+
let depth = 0;
|
|
366
|
+
let quote;
|
|
367
|
+
let inComment = false;
|
|
368
|
+
for (let index = openIndex; index < source.length; index += 1) {
|
|
369
|
+
const char = source[index];
|
|
370
|
+
const next = source[index + 1];
|
|
371
|
+
const previous = source[index - 1];
|
|
372
|
+
if (char === "\\") {
|
|
373
|
+
index += 1;
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
if (inComment) {
|
|
377
|
+
if (char === "*" && next === "/") {
|
|
378
|
+
inComment = false;
|
|
379
|
+
index += 1;
|
|
380
|
+
}
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
if (char === "/" && next === "*") {
|
|
384
|
+
inComment = true;
|
|
385
|
+
index += 1;
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
if (quote) {
|
|
389
|
+
if (char === quote && previous !== "\\") {
|
|
390
|
+
quote = undefined;
|
|
391
|
+
}
|
|
392
|
+
continue;
|
|
393
|
+
}
|
|
394
|
+
if (char === "\"" || char === "'") {
|
|
395
|
+
quote = char;
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
398
|
+
if (char === openChar) {
|
|
399
|
+
depth += 1;
|
|
400
|
+
}
|
|
401
|
+
else if (char === closeChar) {
|
|
402
|
+
depth -= 1;
|
|
403
|
+
if (depth === 0) {
|
|
404
|
+
return index;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
return -1;
|
|
409
|
+
}
|
|
410
|
+
function readAtRuleName(prelude) {
|
|
411
|
+
const match = prelude.match(/^@([-\w]+)/);
|
|
412
|
+
return match?.[1].toLowerCase() ?? "";
|
|
413
|
+
}
|
|
414
|
+
function bodyContainsRules(body) {
|
|
415
|
+
return findNextTopLevelChar(body, "{", 0) !== -1;
|
|
416
|
+
}
|
|
417
|
+
function isCombinator(char) {
|
|
418
|
+
return char === ">" || char === "+" || char === "~" || /\s/.test(char);
|
|
419
|
+
}
|
|
420
|
+
//# sourceMappingURL=css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/compiler/css.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { parse, parseExpressionAt } from "acorn";
|
|
2
2
|
import { createCompileError } from "./errors.js";
|
|
3
|
+
import { compileDescriptorStyle } from "./css.js";
|
|
3
4
|
import { compileTemplateExpression, parseForExpression, validateAssignableExpression, validateTemplateExpression } from "./parseExpression.js";
|
|
4
5
|
export function generate(descriptor, root, options = {}) {
|
|
5
6
|
const context = {
|
|
@@ -201,14 +202,18 @@ export function generate(descriptor, root, options = {}) {
|
|
|
201
202
|
}
|
|
202
203
|
function emitStyleInjection(context, descriptor, indent) {
|
|
203
204
|
const styleId = `mikuru-${hash(`${descriptor.filename ?? ""}\n${descriptor.style ?? ""}`)}`;
|
|
204
|
-
const
|
|
205
|
-
? scopeCssSelectors(descriptor.style?.trim() ?? "", context.scopeAttr)
|
|
206
|
-
: descriptor.style?.trim() ?? "";
|
|
205
|
+
const styleResult = compileDescriptorStyle(descriptor, context.scopeAttr);
|
|
207
206
|
emit(context, indent, `if (!document.querySelector(${quote(`style[data-mikuru-style="${styleId}"]`)})) {`);
|
|
208
207
|
emit(context, indent + 1, "const style = document.createElement(\"style\");");
|
|
209
208
|
emit(context, indent + 1, `style.setAttribute("data-mikuru-style", ${quote(styleId)});`);
|
|
210
|
-
|
|
209
|
+
if (styleResult.scopeAttr) {
|
|
210
|
+
emit(context, indent + 1, `style.setAttribute("data-mikuru-scope", ${quote(styleResult.scopeAttr)});`);
|
|
211
|
+
}
|
|
212
|
+
emit(context, indent + 1, `style.textContent = ${quote(styleResult.code)};`);
|
|
211
213
|
emit(context, indent + 1, "document.head.appendChild(style);");
|
|
214
|
+
if (context.debug) {
|
|
215
|
+
emit(context, indent + 1, `emitDebugEvent("style:inject", { component: __mikuru_componentInfo, componentId: __mikuru_debug.id, style: { id: ${quote(styleId)}, scoped: ${styleResult.scoped ? "true" : "false"}, scopeAttr: ${quote(styleResult.scopeAttr)}, length: ${styleResult.code.length} } });`);
|
|
216
|
+
}
|
|
212
217
|
emit(context, indent, "}");
|
|
213
218
|
}
|
|
214
219
|
function emitDevtoolsRegistration(context, indent) {
|
|
@@ -3883,28 +3888,6 @@ function quotePropertyName(value) {
|
|
|
3883
3888
|
export function createScopeAttr(descriptor) {
|
|
3884
3889
|
return `data-mikuru-scope-${hash(`${descriptor.filename ?? ""}\n${descriptor.style ?? ""}`)}`;
|
|
3885
3890
|
}
|
|
3886
|
-
function scopeCssSelectors(css, scopeAttr) {
|
|
3887
|
-
return css.replace(/([^{}]+)\{/g, (match, selectorSource) => {
|
|
3888
|
-
const selector = selectorSource.trim();
|
|
3889
|
-
if (!selector || selector.startsWith("@")) {
|
|
3890
|
-
return match;
|
|
3891
|
-
}
|
|
3892
|
-
return `${selector
|
|
3893
|
-
.split(",")
|
|
3894
|
-
.map((part) => scopeSingleSelector(part.trim(), scopeAttr))
|
|
3895
|
-
.join(", ")} {`;
|
|
3896
|
-
});
|
|
3897
|
-
}
|
|
3898
|
-
function scopeSingleSelector(selector, scopeAttr) {
|
|
3899
|
-
if (!selector || selector.includes(`[${scopeAttr}]`)) {
|
|
3900
|
-
return selector;
|
|
3901
|
-
}
|
|
3902
|
-
const pseudoIndex = selector.search(/:{1,2}[A-Za-z-]/);
|
|
3903
|
-
if (pseudoIndex === -1) {
|
|
3904
|
-
return `${selector}[${scopeAttr}]`;
|
|
3905
|
-
}
|
|
3906
|
-
return `${selector.slice(0, pseudoIndex)}[${scopeAttr}]${selector.slice(pseudoIndex)}`;
|
|
3907
|
-
}
|
|
3908
3891
|
function hash(value) {
|
|
3909
3892
|
let result = 5381;
|
|
3910
3893
|
for (let index = 0; index < value.length; index += 1) {
|