ripple 0.3.13 → 0.3.14
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 +21 -0
- package/package.json +5 -30
- package/src/runtime/array.js +38 -38
- package/src/runtime/create-subscriber.js +2 -2
- package/src/runtime/internal/client/bindings.js +4 -6
- package/src/runtime/internal/client/events.js +8 -3
- package/src/runtime/internal/client/hmr.js +5 -17
- package/src/runtime/internal/client/runtime.js +1 -0
- package/src/runtime/internal/server/blocks.js +7 -9
- package/src/runtime/internal/server/index.js +14 -22
- package/src/runtime/media-query.js +34 -33
- package/src/runtime/object.js +7 -10
- package/src/runtime/proxy.js +2 -3
- package/src/runtime/reactive-value.js +23 -21
- package/src/utils/ast.js +1 -1
- package/src/utils/attributes.js +43 -0
- package/src/utils/builders.js +2 -2
- package/tests/client/basic/basic.errors.test.rsrx +1 -1
- package/tests/client/basic/basic.styling.test.rsrx +1 -1
- package/tests/client/compiler/compiler.assignments.test.rsrx +1 -1
- package/tests/client/compiler/compiler.attributes.test.rsrx +1 -1
- package/tests/client/compiler/compiler.basic.test.rsrx +13 -13
- package/tests/client/compiler/compiler.tracked-access.test.rsrx +1 -1
- package/tests/client/compiler/compiler.try-in-function.test.rsrx +1 -1
- package/tests/client/compiler/compiler.typescript.test.rsrx +1 -1
- package/tests/client/css/global-additional-cases.test.rsrx +1 -1
- package/tests/client/css/global-advanced-selectors.test.rsrx +1 -1
- package/tests/client/css/global-at-rules.test.rsrx +1 -1
- package/tests/client/css/global-basic.test.rsrx +1 -1
- package/tests/client/css/global-classes-ids.test.rsrx +1 -1
- package/tests/client/css/global-combinators.test.rsrx +1 -1
- package/tests/client/css/global-complex-nesting.test.rsrx +1 -1
- package/tests/client/css/global-edge-cases.test.rsrx +1 -1
- package/tests/client/css/global-keyframes.test.rsrx +1 -1
- package/tests/client/css/global-nested.test.rsrx +1 -1
- package/tests/client/css/global-pseudo.test.rsrx +1 -1
- package/tests/client/css/global-scoping.test.rsrx +1 -1
- package/tests/client/css/style-identifier.test.rsrx +1 -1
- package/tests/client/return.test.rsrx +1 -1
- package/tests/hydration/build-components.js +1 -1
- package/tests/server/style-identifier.test.rsrx +1 -1
- package/tests/setup-server.js +1 -1
- package/tests/utils/compiler-compat-config.test.js +1 -1
- package/src/compiler/comment-utils.js +0 -91
- package/src/compiler/errors.js +0 -77
- package/src/compiler/identifier-utils.js +0 -80
- package/src/compiler/index.d.ts +0 -127
- package/src/compiler/index.js +0 -89
- package/src/compiler/phases/1-parse/index.js +0 -3007
- package/src/compiler/phases/1-parse/style.js +0 -704
- package/src/compiler/phases/2-analyze/css-analyze.js +0 -160
- package/src/compiler/phases/2-analyze/index.js +0 -2208
- package/src/compiler/phases/2-analyze/prune.js +0 -1131
- package/src/compiler/phases/2-analyze/validation.js +0 -168
- package/src/compiler/phases/3-transform/client/index.js +0 -5264
- package/src/compiler/phases/3-transform/segments.js +0 -2125
- package/src/compiler/phases/3-transform/server/index.js +0 -1749
- package/src/compiler/phases/3-transform/stylesheet.js +0 -545
- package/src/compiler/scope.js +0 -476
- package/src/compiler/source-map-utils.js +0 -358
- package/src/compiler/types/acorn.d.ts +0 -11
- package/src/compiler/types/estree-jsx.d.ts +0 -11
- package/src/compiler/types/estree.d.ts +0 -11
- package/src/compiler/types/index.d.ts +0 -1411
- package/src/compiler/types/parse.d.ts +0 -1723
- package/src/compiler/utils.js +0 -1258
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
/** @import * as AST from 'estree' */
|
|
2
|
-
|
|
3
|
-
import { walk } from 'zimmerframe';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* True if is `:global` without arguments
|
|
7
|
-
* @param {AST.CSS.SimpleSelector} simple_selector
|
|
8
|
-
*/
|
|
9
|
-
function is_global_block_selector(simple_selector) {
|
|
10
|
-
return (
|
|
11
|
-
simple_selector.type === 'PseudoClassSelector' &&
|
|
12
|
-
simple_selector.name === 'global' &&
|
|
13
|
-
simple_selector.args === null
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* True if is `:global(...)` or `:global` and no pseudo class that is scoped.
|
|
19
|
-
* @param {AST.CSS.RelativeSelector} relative_selector
|
|
20
|
-
*/
|
|
21
|
-
function is_global(relative_selector) {
|
|
22
|
-
const first = relative_selector.selectors[0];
|
|
23
|
-
|
|
24
|
-
return (
|
|
25
|
-
first?.type === 'PseudoClassSelector' &&
|
|
26
|
-
first.name === 'global' &&
|
|
27
|
-
(first.args === null ||
|
|
28
|
-
// Only these two selector types keep the whole selector global, because e.g.
|
|
29
|
-
// :global(button).x means that the selector is still scoped because of the .x
|
|
30
|
-
relative_selector.selectors.every(
|
|
31
|
-
(selector) =>
|
|
32
|
-
selector.type === 'PseudoClassSelector' || selector.type === 'PseudoElementSelector',
|
|
33
|
-
))
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Analyze CSS and set metadata for global selectors
|
|
39
|
-
* @param {AST.CSS.Node} css - The CSS AST
|
|
40
|
-
*/
|
|
41
|
-
export function analyze_css(css) {
|
|
42
|
-
walk(css, /** @type {{ rule: AST.CSS.Rule | null }} */ ({ rule: null }), {
|
|
43
|
-
Rule(node, context) {
|
|
44
|
-
node.metadata.parent_rule = context.state.rule;
|
|
45
|
-
|
|
46
|
-
// Check for :global blocks
|
|
47
|
-
// A global block is when the selector starts with :global and has no local selectors before it
|
|
48
|
-
for (const complex_selector of node.prelude.children) {
|
|
49
|
-
let is_global_block = false;
|
|
50
|
-
|
|
51
|
-
for (
|
|
52
|
-
let selector_idx = 0;
|
|
53
|
-
selector_idx < complex_selector.children.length;
|
|
54
|
-
selector_idx++
|
|
55
|
-
) {
|
|
56
|
-
const child = complex_selector.children[selector_idx];
|
|
57
|
-
const idx = child.selectors.findIndex(is_global_block_selector);
|
|
58
|
-
|
|
59
|
-
if (is_global_block) {
|
|
60
|
-
// All selectors after :global are unscoped
|
|
61
|
-
child.metadata.is_global_like = true;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Only set is_global_block if this is the FIRST RelativeSelector and it starts with :global
|
|
65
|
-
if (selector_idx === 0 && idx === 0) {
|
|
66
|
-
// `child` starts with `:global` and is the first selector in the chain
|
|
67
|
-
is_global_block = true;
|
|
68
|
-
node.metadata.is_global_block = is_global_block;
|
|
69
|
-
} else if (idx === 0) {
|
|
70
|
-
// :global appears later in the selector chain (e.g., `div :global p`)
|
|
71
|
-
// Set is_global_block for marking subsequent selectors as global-like
|
|
72
|
-
is_global_block = true;
|
|
73
|
-
} else if (idx !== -1) {
|
|
74
|
-
// `:global` is not at the start - this is invalid but we'll let it through for now
|
|
75
|
-
// The transform phase will handle removal
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Pass the current rule as state to nested nodes
|
|
81
|
-
const state = { rule: node };
|
|
82
|
-
context.visit(node.prelude, state);
|
|
83
|
-
context.visit(node.block, state);
|
|
84
|
-
},
|
|
85
|
-
|
|
86
|
-
ComplexSelector(node, context) {
|
|
87
|
-
// Set the rule metadata before analyzing children
|
|
88
|
-
node.metadata.rule = context.state.rule;
|
|
89
|
-
|
|
90
|
-
context.next(); // analyze relevant selectors first
|
|
91
|
-
|
|
92
|
-
{
|
|
93
|
-
const global = node.children.find(is_global);
|
|
94
|
-
|
|
95
|
-
if (global) {
|
|
96
|
-
const is_nested = context.path.at(-2)?.type === 'PseudoClassSelector';
|
|
97
|
-
if (
|
|
98
|
-
is_nested &&
|
|
99
|
-
!(/** @type {AST.CSS.PseudoClassSelector} */ (global.selectors[0]).args)
|
|
100
|
-
) {
|
|
101
|
-
throw new Error(`A :global selector cannot be inside a pseudoclass.`);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const idx = node.children.indexOf(global);
|
|
105
|
-
const first = /** @type {AST.CSS.PseudoClassSelector} */ (global.selectors[0]);
|
|
106
|
-
if (first.args !== null && idx !== 0 && idx !== node.children.length - 1) {
|
|
107
|
-
// ensure `:global(...)` is not used in the middle of a selector (but multiple `global(...)` in sequence are ok)
|
|
108
|
-
for (let i = idx + 1; i < node.children.length; i++) {
|
|
109
|
-
if (!is_global(node.children[i])) {
|
|
110
|
-
throw new Error(
|
|
111
|
-
`:global(...) can be at the start or end of a selector sequence, but not in the middle.`,
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Set is_global metadata
|
|
120
|
-
node.metadata.is_global = node.children.every(
|
|
121
|
-
({ metadata }) => metadata.is_global || metadata.is_global_like,
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
node.metadata.used ||= node.metadata.is_global;
|
|
125
|
-
},
|
|
126
|
-
|
|
127
|
-
PseudoClassSelector(node, context) {
|
|
128
|
-
// Walk into :is(), :where(), :has(), and :not() to initialize metadata for nested selectors
|
|
129
|
-
if (
|
|
130
|
-
(node.name === 'is' ||
|
|
131
|
-
node.name === 'where' ||
|
|
132
|
-
node.name === 'has' ||
|
|
133
|
-
node.name === 'not') &&
|
|
134
|
-
node.args
|
|
135
|
-
) {
|
|
136
|
-
context.next();
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
RelativeSelector(node, context) {
|
|
140
|
-
// Check if this selector is a :global selector
|
|
141
|
-
node.metadata.is_global = node.selectors.length >= 1 && is_global(node);
|
|
142
|
-
|
|
143
|
-
// Check for :root and other global-like selectors
|
|
144
|
-
if (
|
|
145
|
-
node.selectors.length >= 1 &&
|
|
146
|
-
node.selectors.every(
|
|
147
|
-
(selector) =>
|
|
148
|
-
selector.type === 'PseudoClassSelector' || selector.type === 'PseudoElementSelector',
|
|
149
|
-
)
|
|
150
|
-
) {
|
|
151
|
-
const first = node.selectors[0];
|
|
152
|
-
node.metadata.is_global_like ||=
|
|
153
|
-
(first.type === 'PseudoClassSelector' && first.name === 'host') ||
|
|
154
|
-
(first.type === 'PseudoClassSelector' && first.name === 'root');
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
context.next();
|
|
158
|
-
},
|
|
159
|
-
});
|
|
160
|
-
}
|