zyzz 0.0.21 → 0.0.22
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/Zyzz.podspec +16 -0
- package/dist/Style.d.ts +3 -1
- package/dist/Style.d.ts.map +1 -1
- package/dist/Style.js.map +1 -1
- package/dist/babel/NativeJsx.d.ts.map +1 -1
- package/dist/babel/NativeJsx.js +204 -12
- package/dist/babel/NativeJsx.js.map +1 -1
- package/dist/babel/index.d.ts +6 -2
- package/dist/babel/index.d.ts.map +1 -1
- package/dist/babel/index.js +10 -1
- package/dist/babel/index.js.map +1 -1
- package/dist/compiler/Graph.d.ts.map +1 -1
- package/dist/compiler/Graph.js +64 -0
- package/dist/compiler/Graph.js.map +1 -1
- package/dist/compiler/Native.d.ts +6 -3
- package/dist/compiler/Native.d.ts.map +1 -1
- package/dist/compiler/Native.js +142 -24
- package/dist/compiler/Native.js.map +1 -1
- package/dist/compiler/Source.d.ts +2 -0
- package/dist/compiler/Source.d.ts.map +1 -1
- package/dist/compiler/Source.js +17 -5
- package/dist/compiler/Source.js.map +1 -1
- package/dist/compiler/internal/Configurations.d.ts +2 -0
- package/dist/compiler/internal/Configurations.d.ts.map +1 -1
- package/dist/compiler/internal/Configurations.js +21 -3
- package/dist/compiler/internal/Configurations.js.map +1 -1
- package/dist/compiler/internal/Contract.d.ts.map +1 -1
- package/dist/compiler/internal/Contract.js +75 -38
- package/dist/compiler/internal/Contract.js.map +1 -1
- package/dist/compiler/internal/Contributions.d.ts.map +1 -1
- package/dist/compiler/internal/Contributions.js +7 -1
- package/dist/compiler/internal/Contributions.js.map +1 -1
- package/dist/compiler/internal/Descriptors.d.ts.map +1 -1
- package/dist/compiler/internal/Descriptors.js +11 -2
- package/dist/compiler/internal/Descriptors.js.map +1 -1
- package/dist/compiler/internal/NativeBindings.d.ts +24 -26
- package/dist/compiler/internal/NativeBindings.d.ts.map +1 -1
- package/dist/compiler/internal/NativeBindings.js +61 -8
- package/dist/compiler/internal/NativeBindings.js.map +1 -1
- package/dist/compiler/internal/NativeMedia.d.ts +14 -0
- package/dist/compiler/internal/NativeMedia.d.ts.map +1 -0
- package/dist/compiler/internal/NativeMedia.js +287 -0
- package/dist/compiler/internal/NativeMedia.js.map +1 -0
- package/dist/compiler/internal/NativeVars.d.ts +28 -0
- package/dist/compiler/internal/NativeVars.d.ts.map +1 -0
- package/dist/compiler/internal/NativeVars.js +157 -0
- package/dist/compiler/internal/NativeVars.js.map +1 -0
- package/dist/compiler/internal/PackedStyles.d.ts +2 -0
- package/dist/compiler/internal/PackedStyles.d.ts.map +1 -1
- package/dist/compiler/internal/PackedStyles.js +2 -0
- package/dist/compiler/internal/PackedStyles.js.map +1 -1
- package/dist/compiler/internal/Themes.d.ts +22 -1
- package/dist/compiler/internal/Themes.d.ts.map +1 -1
- package/dist/compiler/internal/Themes.js +118 -3
- package/dist/compiler/internal/Themes.js.map +1 -1
- package/dist/compiler/internal/Vars.d.ts +1 -1
- package/dist/compiler/internal/Vars.d.ts.map +1 -1
- package/dist/compiler/internal/Vars.js +7 -2
- package/dist/compiler/internal/Vars.js.map +1 -1
- package/dist/default.js.zyzz.json +1 -1
- package/dist/internal/Completion.d.ts +1 -1
- package/dist/internal/Completion.d.ts.map +1 -1
- package/dist/internal/Targets.d.ts.map +1 -1
- package/dist/internal/Targets.js +2 -0
- package/dist/internal/Targets.js.map +1 -1
- package/dist/internal/Token.d.ts +0 -2
- package/dist/internal/Token.d.ts.map +1 -1
- package/dist/internal/Token.js.map +1 -1
- package/dist/internal/Value.d.ts +7 -0
- package/dist/internal/Value.d.ts.map +1 -1
- package/dist/internal/Value.js.map +1 -1
- package/dist/metro/Graph.d.ts +22 -7
- package/dist/metro/Graph.d.ts.map +1 -1
- package/dist/metro/Graph.js +179 -42
- package/dist/metro/Graph.js.map +1 -1
- package/dist/metro/Watch.d.ts +28 -4
- package/dist/metro/Watch.d.ts.map +1 -1
- package/dist/metro/Watch.js +39 -7
- package/dist/metro/Watch.js.map +1 -1
- package/dist/metro/index.d.ts +15 -4
- package/dist/metro/index.d.ts.map +1 -1
- package/dist/metro/index.js +27 -0
- package/dist/metro/index.js.map +1 -1
- package/dist/metro/transformer.d.ts +5 -1
- package/dist/metro/transformer.d.ts.map +1 -1
- package/dist/metro/transformer.js +5 -3
- package/dist/metro/transformer.js.map +1 -1
- package/dist/react-native/StyleSheet.d.ts +3 -2
- package/dist/react-native/StyleSheet.d.ts.map +1 -1
- package/dist/react-native/StyleSheet.js +17 -34
- package/dist/react-native/StyleSheet.js.map +1 -1
- package/dist/react-native/index.d.ts +1 -1
- package/dist/react-native/index.d.ts.map +1 -1
- package/dist/react-native/index.js +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native/index.native.d.ts +5 -0
- package/dist/react-native/index.native.js +20 -0
- package/dist/react-native/index.native.js.map +7 -0
- package/dist/react-native/internal/Calculation.d.ts +7 -0
- package/dist/react-native/internal/Calculation.d.ts.map +1 -0
- package/dist/react-native/internal/Calculation.js +134 -0
- package/dist/react-native/internal/Calculation.js.map +1 -0
- package/dist/react-native/internal/Device.js +191 -0
- package/dist/react-native/internal/Device.js.map +7 -0
- package/dist/react-native/internal/NativeZyzz.js +7 -0
- package/dist/react-native/internal/NativeZyzz.js.map +7 -0
- package/dist/react-native/internal/Scalar.d.ts.map +1 -1
- package/dist/react-native/internal/Scalar.js +9 -2
- package/dist/react-native/internal/Scalar.js.map +1 -1
- package/dist/react-native/internal/Store.d.ts +32 -0
- package/dist/react-native/internal/Store.d.ts.map +1 -0
- package/dist/react-native/internal/Store.js +57 -0
- package/dist/react-native/internal/Store.js.map +1 -0
- package/dist/react-native/internal/Tokens.d.ts +21 -0
- package/dist/react-native/internal/Tokens.d.ts.map +1 -0
- package/dist/react-native/internal/Tokens.js +58 -0
- package/dist/react-native/internal/Tokens.js.map +1 -0
- package/dist/react-native/internal/Viewport.d.ts +6 -0
- package/dist/react-native/internal/Viewport.d.ts.map +1 -0
- package/dist/react-native/internal/Viewport.js +4 -0
- package/dist/react-native/internal/Viewport.js.map +1 -0
- package/dist/react-native/react.d.ts +74 -11
- package/dist/react-native/react.d.ts.map +1 -1
- package/dist/react-native/react.js +111 -12
- package/dist/react-native/react.js.map +1 -1
- package/dist/react-native/reanimated.d.ts +39 -0
- package/dist/react-native/reanimated.d.ts.map +1 -0
- package/dist/react-native/reanimated.js +76 -0
- package/dist/react-native/reanimated.js.map +1 -0
- package/dist/runtime/NativeContext.d.ts +10 -1
- package/dist/runtime/NativeContext.d.ts.map +1 -1
- package/dist/runtime/NativeContext.js +67 -14
- package/dist/runtime/NativeContext.js.map +1 -1
- package/dist/runtime/NativeDynamic.d.ts +3 -2
- package/dist/runtime/NativeDynamic.d.ts.map +1 -1
- package/dist/runtime/NativeDynamic.js +32 -7
- package/dist/runtime/NativeDynamic.js.map +1 -1
- package/dist/runtime/NativeStatic.d.ts +23 -0
- package/dist/runtime/NativeStatic.d.ts.map +1 -0
- package/dist/runtime/NativeStatic.js +106 -0
- package/dist/runtime/NativeStatic.js.map +1 -0
- package/dist/runtime/NativeVars.d.ts +53 -0
- package/dist/runtime/NativeVars.d.ts.map +1 -0
- package/dist/runtime/NativeVars.js +77 -0
- package/dist/runtime/NativeVars.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/internal/NativeMedia.d.ts +25 -0
- package/dist/runtime/internal/NativeMedia.d.ts.map +1 -0
- package/dist/runtime/internal/NativeMedia.js +36 -0
- package/dist/runtime/internal/NativeMedia.js.map +1 -0
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +7 -35
- package/dist/vite/index.js.map +1 -1
- package/dist/web/Css.d.ts.map +1 -1
- package/dist/web/Css.js +31 -19
- package/dist/web/Css.js.map +1 -1
- package/dist/web/internal/Themes.d.ts +0 -2
- package/dist/web/internal/Themes.d.ts.map +1 -1
- package/dist/web/internal/Themes.js +30 -28
- package/dist/web/internal/Themes.js.map +1 -1
- package/dist/web/page.d.ts +2 -0
- package/dist/web/page.d.ts.map +1 -1
- package/native/NativeZyzz.cpp +215 -0
- package/native/NativeZyzz.h +52 -0
- package/native/ZyzzSpecJSI.h +65 -0
- package/native/android/CMakeLists.txt +8 -0
- package/native/android/ZyzzSpec-generated.cpp +50 -0
- package/native/android/ZyzzSpec.h +31 -0
- package/native/ios/ZyzzModuleProvider.mm +13 -0
- package/package.json +39 -1
- package/react-native.config.ts +14 -0
- package/src/Style.ts +11 -8
- package/src/babel/NativeJsx.ts +305 -28
- package/src/babel/index.ts +21 -3
- package/src/compiler/Graph.ts +75 -0
- package/src/compiler/Native.ts +158 -26
- package/src/compiler/Source.ts +32 -5
- package/src/compiler/internal/Configurations.ts +25 -3
- package/src/compiler/internal/Contract.ts +98 -50
- package/src/compiler/internal/Contributions.ts +7 -1
- package/src/compiler/internal/Descriptors.ts +12 -8
- package/src/compiler/internal/NativeBindings.ts +98 -15
- package/src/compiler/internal/NativeMedia.ts +342 -0
- package/src/compiler/internal/NativeVars.ts +228 -0
- package/src/compiler/internal/PackedStyles.ts +4 -0
- package/src/compiler/internal/Themes.ts +187 -2
- package/src/compiler/internal/Vars.ts +12 -1
- package/src/internal/Completion.ts +6 -3
- package/src/internal/Targets.ts +2 -0
- package/src/internal/Token.ts +0 -2
- package/src/internal/Value.ts +20 -0
- package/src/metro/Graph.ts +235 -50
- package/src/metro/Watch.ts +95 -10
- package/src/metro/index.ts +62 -4
- package/src/metro/transformer.ts +21 -11
- package/src/react-native/StyleSheet.ts +28 -44
- package/src/react-native/index.native.ts +10 -0
- package/src/react-native/index.ts +1 -1
- package/src/react-native/internal/Calculation.ts +159 -0
- package/src/react-native/internal/Device.ts +231 -0
- package/src/react-native/internal/NativeZyzz.ts +20 -0
- package/src/react-native/internal/Scalar.ts +13 -2
- package/src/react-native/internal/Store.ts +78 -0
- package/src/react-native/internal/Tokens.ts +85 -0
- package/src/react-native/internal/Viewport.ts +8 -0
- package/src/react-native/react.ts +211 -19
- package/src/react-native/reanimated.ts +162 -0
- package/src/runtime/NativeContext.ts +88 -17
- package/src/runtime/NativeDynamic.ts +35 -10
- package/src/runtime/NativeStatic.ts +145 -0
- package/src/runtime/NativeVars.ts +189 -0
- package/src/runtime/index.ts +6 -0
- package/src/runtime/internal/NativeMedia.ts +63 -0
- package/src/vite/index.ts +9 -42
- package/src/web/Css.ts +42 -27
- package/src/web/internal/Themes.ts +34 -57
- package/src/web/page.ts +2 -0
|
@@ -1,17 +1,68 @@
|
|
|
1
|
+
/** Lowers target-neutral callback declarations to ordered native binding data. @module */
|
|
1
2
|
import * as Binding from '../../internal/Binding.js';
|
|
2
|
-
import * as Token from '../../internal/Token.js';
|
|
3
|
-
import * as StyleSheet from '../../react-native/StyleSheet.js';
|
|
4
3
|
import * as Scalar from '../../react-native/internal/Scalar.js';
|
|
4
|
+
import * as StyleSheet from '../../react-native/StyleSheet.js';
|
|
5
|
+
import * as Token from '../../internal/Token.js';
|
|
6
|
+
import * as Tokens from '../../react-native/internal/Tokens.js';
|
|
5
7
|
/** Compiles static fragments and retains scalar assignments in authored order. */
|
|
6
8
|
export function compile(recipe, call, options, prepared = prepare(recipe, call, options)) {
|
|
9
|
+
const selected = options.vars?.[options.set ?? 'default'];
|
|
10
|
+
const metadata = selected &&
|
|
11
|
+
Object.getOwnPropertyDescriptor(selected, Token.definition)?.value;
|
|
7
12
|
return {
|
|
8
13
|
...prepared,
|
|
14
|
+
program: {
|
|
15
|
+
slots: prepared.program.slots,
|
|
16
|
+
rules: prepared.program.rules.map((rule) => ({
|
|
17
|
+
...rule,
|
|
18
|
+
steps: rule.steps.map((step) => 'style' in step
|
|
19
|
+
? step
|
|
20
|
+
: {
|
|
21
|
+
...step,
|
|
22
|
+
parts: step.parts.map((part) => Token.is(part)
|
|
23
|
+
? Tokens.resolve(part, {
|
|
24
|
+
...options,
|
|
25
|
+
metadata,
|
|
26
|
+
resolution: { schemeIndependent: true },
|
|
27
|
+
})
|
|
28
|
+
: part),
|
|
29
|
+
}),
|
|
30
|
+
})),
|
|
31
|
+
},
|
|
9
32
|
styles: StyleSheet.select(prepared.styles, {
|
|
10
33
|
set: options.set ?? 'default',
|
|
11
34
|
colorScheme: options.colorScheme,
|
|
12
35
|
}),
|
|
13
36
|
};
|
|
14
37
|
}
|
|
38
|
+
/** Removes dynamic instructions and resolves absolute line heights before publication. */
|
|
39
|
+
export function finite(options) {
|
|
40
|
+
const styles = { ...options.styles };
|
|
41
|
+
return {
|
|
42
|
+
axes: options.axes,
|
|
43
|
+
defaults: options.defaults,
|
|
44
|
+
rules: options.program.rules.map((rule) => ({
|
|
45
|
+
matches: rule.matches,
|
|
46
|
+
steps: rule.steps.map((step) => {
|
|
47
|
+
if ('style' in step)
|
|
48
|
+
return step.style;
|
|
49
|
+
if (step.property !== 'lineHeight' ||
|
|
50
|
+
!step.parts.length ||
|
|
51
|
+
step.parts.some((part) => typeof part === 'object'))
|
|
52
|
+
throw new Error('Static native recipes cannot contain runtime bindings.');
|
|
53
|
+
const value = (step.parts.length === 1 ? step.parts[0] : step.parts.join(''));
|
|
54
|
+
if (typeof value === 'number')
|
|
55
|
+
return value;
|
|
56
|
+
const name = String(Object.keys(styles).length);
|
|
57
|
+
styles[name] = {
|
|
58
|
+
lineHeight: Scalar.length(value, options, false, ['lineHeight']),
|
|
59
|
+
};
|
|
60
|
+
return name;
|
|
61
|
+
}),
|
|
62
|
+
})),
|
|
63
|
+
styles,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
15
66
|
/** Prepares immutable programs and all set/scheme tables before selection. */
|
|
16
67
|
export function prepare(recipe, call, options) {
|
|
17
68
|
const slots = Object.fromEntries(Object.entries(call.slots ?? {}).map(([name, slot]) => [name, slot.name]));
|
|
@@ -21,11 +72,6 @@ export function prepare(recipe, call, options) {
|
|
|
21
72
|
]);
|
|
22
73
|
const fragments = [];
|
|
23
74
|
const rules = [];
|
|
24
|
-
let count = 1;
|
|
25
|
-
for (const choices of Object.values(recipe.axes))
|
|
26
|
-
count *= choices.length + 1;
|
|
27
|
-
if (count > 256)
|
|
28
|
-
throw new Error('Native recipes support at most 256 selections, including null choices.');
|
|
29
75
|
for (const rule of recipe.rules) {
|
|
30
76
|
const steps = [];
|
|
31
77
|
function fragment(style) {
|
|
@@ -68,11 +114,18 @@ export function prepare(recipe, call, options) {
|
|
|
68
114
|
const values = parts.map((part) => {
|
|
69
115
|
if (typeof part === 'string' || typeof part === 'number')
|
|
70
116
|
return part;
|
|
117
|
+
if (Token.is(part))
|
|
118
|
+
return part;
|
|
71
119
|
if (!Binding.is(part) || !available.has(part.name))
|
|
72
120
|
throw new Error('Native bindings require declared runtime scalar fields.');
|
|
73
|
-
return {
|
|
121
|
+
return {
|
|
122
|
+
slot: part.name,
|
|
123
|
+
...(part.type === 'number' ? { number: true } : {}),
|
|
124
|
+
};
|
|
74
125
|
});
|
|
126
|
+
const calculation = values.some((value) => typeof value === 'string' && /(?:^|\s)calc\(/i.test(value));
|
|
75
127
|
if (values.length > 1 &&
|
|
128
|
+
!calculation &&
|
|
76
129
|
!(values.length === 2 &&
|
|
77
130
|
typeof values[0] === 'object' &&
|
|
78
131
|
['px', 'rem', '%'].includes(String(values[1]))))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeBindings.js","sourceRoot":"","sources":["../../../src/compiler/internal/NativeBindings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NativeBindings.js","sourceRoot":"","sources":["../../../src/compiler/internal/NativeBindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type * as Media from '../../runtime/internal/NativeMedia.js';
|
|
2
|
+
import * as Scalar from '../../react-native/internal/Scalar.js';
|
|
3
|
+
import type * as Style from '../../Style.js';
|
|
4
|
+
import type * as StyleSheet from '../../react-native/StyleSheet.js';
|
|
5
|
+
/** Retains authored precedence while selecting each possible media outcome. */
|
|
6
|
+
export declare function prepare<variables extends StyleSheet.compile.Options['vars']>(styles: readonly Style.NamedStyle[] | undefined, vars: variables, options: Scalar.Options): {
|
|
7
|
+
queries: Media.Query[];
|
|
8
|
+
select(selection: string): {
|
|
9
|
+
style: (entry: Style.NamedStyle) => Style.NamedStyle;
|
|
10
|
+
vars: variables | undefined;
|
|
11
|
+
};
|
|
12
|
+
selections: string[];
|
|
13
|
+
} | undefined;
|
|
14
|
+
//# sourceMappingURL=NativeMedia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeMedia.d.ts","sourceRoot":"","sources":["../../../src/compiler/internal/NativeMedia.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,uCAAuC,CAAA;AAC/D,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,KAAK,UAAU,MAAM,kCAAkC,CAAA;AAGnE,+EAA+E;AAC/E,wBAAgB,OAAO,CAAC,SAAS,SAAS,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAC1E,MAAM,EAAE,SAAS,KAAK,CAAC,UAAU,EAAE,GAAG,SAAS,EAC/C,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,CAAC,OAAO;;sBAiFH,MAAM;uBA8CA,KAAK,CAAC,UAAU,KAAG,KAAK,CAAC,UAAU;;;;cAyD9D"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/** Lowers native media rules and conditional tokens to bounded static alternatives. @module */
|
|
2
|
+
import * as CssTree from 'css-tree';
|
|
3
|
+
import * as Scalar from '../../react-native/internal/Scalar.js';
|
|
4
|
+
import * as Token from '../../internal/Token.js';
|
|
5
|
+
/** Retains authored precedence while selecting each possible media outcome. */
|
|
6
|
+
export function prepare(styles, vars, options) {
|
|
7
|
+
const catalog = vars;
|
|
8
|
+
const expressions = new Map();
|
|
9
|
+
const names = new Map();
|
|
10
|
+
const queries = [];
|
|
11
|
+
const visited = new Set();
|
|
12
|
+
function add(name) {
|
|
13
|
+
if (names.has(name))
|
|
14
|
+
return;
|
|
15
|
+
const query = parse(name, options);
|
|
16
|
+
const expression = JSON.stringify(query);
|
|
17
|
+
let index = expressions.get(expression);
|
|
18
|
+
if (index === undefined) {
|
|
19
|
+
index = queries.length;
|
|
20
|
+
if (index === 8)
|
|
21
|
+
throw new Error('Native media supports at most eight distinct conditions per definition.');
|
|
22
|
+
queries.push(query);
|
|
23
|
+
expressions.set(expression, index);
|
|
24
|
+
}
|
|
25
|
+
names.set(name, index);
|
|
26
|
+
}
|
|
27
|
+
function values(value) {
|
|
28
|
+
if (!value || typeof value !== 'object' || visited.has(value))
|
|
29
|
+
return;
|
|
30
|
+
visited.add(value);
|
|
31
|
+
if (Token.is(value)) {
|
|
32
|
+
values(value.value);
|
|
33
|
+
for (const theme of Object.values(catalog ?? {})) {
|
|
34
|
+
const metadata = theme[Token.definition];
|
|
35
|
+
if (metadata.contract === value.contract ||
|
|
36
|
+
(metadata.contract[Token.identity] !== undefined &&
|
|
37
|
+
metadata.contract[Token.identity] ===
|
|
38
|
+
value.contract[Token.identity]))
|
|
39
|
+
values(metadata.values[value.path]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (Token.isExpression(value))
|
|
43
|
+
value.parts.forEach(values);
|
|
44
|
+
else if ('default' in value) {
|
|
45
|
+
for (const [name, entry] of Object.entries(value)) {
|
|
46
|
+
if (name !== 'default') {
|
|
47
|
+
// Unsupported variable leaves keep their deferred read diagnostic.
|
|
48
|
+
try {
|
|
49
|
+
add(name);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (!(error instanceof UnsupportedError))
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
values(entry);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else if ('light' in value && 'dark' in value) {
|
|
60
|
+
values(value.light);
|
|
61
|
+
values(value.dark);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function visit(style) {
|
|
65
|
+
for (const declaration of style.declarations)
|
|
66
|
+
values(declaration.value);
|
|
67
|
+
for (const rule of style.rules ?? []) {
|
|
68
|
+
if (rule.condition?.startsWith('@media'))
|
|
69
|
+
add(rule.condition);
|
|
70
|
+
visit(rule.style);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
styles?.forEach(visit);
|
|
74
|
+
if (!styles)
|
|
75
|
+
for (const theme of Object.values(catalog ?? {})) {
|
|
76
|
+
const metadata = theme[Token.definition];
|
|
77
|
+
Object.values(metadata.values).forEach(values);
|
|
78
|
+
}
|
|
79
|
+
if (!queries.length)
|
|
80
|
+
return;
|
|
81
|
+
return {
|
|
82
|
+
queries,
|
|
83
|
+
select(selection) {
|
|
84
|
+
const active = new Set();
|
|
85
|
+
function value(entry) {
|
|
86
|
+
if (!entry || typeof entry !== 'object')
|
|
87
|
+
return entry;
|
|
88
|
+
if (active.has(entry))
|
|
89
|
+
throw new Error('Native token aliases must not form a cycle.');
|
|
90
|
+
active.add(entry);
|
|
91
|
+
try {
|
|
92
|
+
if (Token.is(entry))
|
|
93
|
+
return Token.create({
|
|
94
|
+
...entry,
|
|
95
|
+
value: value(entry.value),
|
|
96
|
+
});
|
|
97
|
+
if (Token.isExpression(entry))
|
|
98
|
+
return { ...entry, parts: entry.parts.map(value) };
|
|
99
|
+
if ('default' in entry) {
|
|
100
|
+
const branches = Object.entries(entry);
|
|
101
|
+
if (branches.some(([name]) => name !== 'default' && !names.has(name)))
|
|
102
|
+
return Object.fromEntries(branches
|
|
103
|
+
.filter(([name]) => name === 'default' || !names.has(name))
|
|
104
|
+
.map(([name, branch]) => [name, value(branch)]));
|
|
105
|
+
let selected = entry.default;
|
|
106
|
+
for (const [name, branch] of branches)
|
|
107
|
+
if (name !== 'default' && selection[names.get(name)] === '1')
|
|
108
|
+
selected = branch;
|
|
109
|
+
return value(selected);
|
|
110
|
+
}
|
|
111
|
+
if ('light' in entry && 'dark' in entry)
|
|
112
|
+
return {
|
|
113
|
+
...entry,
|
|
114
|
+
dark: value(entry.dark),
|
|
115
|
+
light: value(entry.light),
|
|
116
|
+
};
|
|
117
|
+
return entry;
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
active.delete(entry);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function style(entry) {
|
|
124
|
+
return {
|
|
125
|
+
...entry,
|
|
126
|
+
declarations: entry.declarations.map((declaration) => ({
|
|
127
|
+
...declaration,
|
|
128
|
+
value: value(declaration.value),
|
|
129
|
+
})),
|
|
130
|
+
...(entry.rules
|
|
131
|
+
? {
|
|
132
|
+
rules: entry.rules.flatMap((rule) => {
|
|
133
|
+
const index = rule.condition === undefined
|
|
134
|
+
? undefined
|
|
135
|
+
: names.get(rule.condition);
|
|
136
|
+
if (index !== undefined && selection[index] !== '1')
|
|
137
|
+
return [];
|
|
138
|
+
return [
|
|
139
|
+
{
|
|
140
|
+
...(index === undefined ? rule : {}),
|
|
141
|
+
style: style(rule.style),
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
}),
|
|
145
|
+
}
|
|
146
|
+
: {}),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
style,
|
|
151
|
+
vars: catalog &&
|
|
152
|
+
Object.fromEntries(Object.entries(catalog).map(([name, theme]) => {
|
|
153
|
+
const metadata = theme[Token.definition];
|
|
154
|
+
return [
|
|
155
|
+
name,
|
|
156
|
+
Object.defineProperty({}, Token.definition, {
|
|
157
|
+
value: {
|
|
158
|
+
...metadata,
|
|
159
|
+
values: Object.fromEntries(Object.entries(metadata.values).map(([path, entry]) => [
|
|
160
|
+
path,
|
|
161
|
+
value(entry),
|
|
162
|
+
])),
|
|
163
|
+
},
|
|
164
|
+
}),
|
|
165
|
+
];
|
|
166
|
+
})),
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
selections: Array.from({ length: 2 ** queries.length }, (_entry, index) => index.toString(2).padStart(queries.length, '0')),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
class UnsupportedError extends Error {
|
|
173
|
+
name = 'NativeMedia.UnsupportedError';
|
|
174
|
+
}
|
|
175
|
+
function parse(input, options) {
|
|
176
|
+
if (!input.startsWith('@media'))
|
|
177
|
+
throw new UnsupportedError('Native conditional variables require media queries.');
|
|
178
|
+
const parsed = CssTree.parse(input.slice(6), { context: 'mediaQueryList' });
|
|
179
|
+
let count = 0;
|
|
180
|
+
function read(node) {
|
|
181
|
+
if (++count > 128)
|
|
182
|
+
throw new Error('Native media queries exceed 128 syntax nodes.');
|
|
183
|
+
if (node.type === 'MediaQueryList') {
|
|
184
|
+
const queries = node.children.toArray().map(read);
|
|
185
|
+
return queries.length === 1 ? queries[0] : { kind: 'or', queries };
|
|
186
|
+
}
|
|
187
|
+
if (node.type === 'MediaQuery') {
|
|
188
|
+
if ((node.mediaType &&
|
|
189
|
+
!['all', 'screen'].includes(node.mediaType.toLowerCase())) ||
|
|
190
|
+
node.modifier?.toLowerCase() === 'not')
|
|
191
|
+
throw new UnsupportedError('Native media types support all or screen without negation.');
|
|
192
|
+
return node.condition
|
|
193
|
+
? read(node.condition)
|
|
194
|
+
: { kind: 'compare', left: 0, operator: '=', right: 0 };
|
|
195
|
+
}
|
|
196
|
+
if (node.type === 'Condition') {
|
|
197
|
+
const parts = node.children.toArray();
|
|
198
|
+
if (parts.length === 1)
|
|
199
|
+
return read(parts[0]);
|
|
200
|
+
if (parts.length === 2 &&
|
|
201
|
+
parts[0]?.type === 'Identifier' &&
|
|
202
|
+
parts[0].name.toLowerCase() === 'not')
|
|
203
|
+
return { kind: 'not', query: read(parts[1]) };
|
|
204
|
+
const operator = parts[1]?.type === 'Identifier'
|
|
205
|
+
? parts[1].name.toLowerCase()
|
|
206
|
+
: undefined;
|
|
207
|
+
if ((operator !== 'and' && operator !== 'or') ||
|
|
208
|
+
parts.length % 2 !== 1 ||
|
|
209
|
+
parts.some((part, index) => index % 2 === 1 &&
|
|
210
|
+
(part.type !== 'Identifier' ||
|
|
211
|
+
part.name.toLowerCase() !== operator)))
|
|
212
|
+
throw new UnsupportedError('Unsupported native media condition.');
|
|
213
|
+
return {
|
|
214
|
+
kind: operator,
|
|
215
|
+
queries: parts.filter((_part, index) => index % 2 === 0).map(read),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function operand(entry) {
|
|
219
|
+
if (entry.type === 'Identifier' &&
|
|
220
|
+
(entry.name.toLowerCase() === 'height' ||
|
|
221
|
+
entry.name.toLowerCase() === 'width'))
|
|
222
|
+
return entry.name.toLowerCase();
|
|
223
|
+
if (entry.type === 'Dimension') {
|
|
224
|
+
try {
|
|
225
|
+
return Scalar.length(`${entry.value}${entry.unit.toLowerCase()}`, options, false, []);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
throw new UnsupportedError(error.message);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (entry.type === 'Number' && Number(entry.value) === 0)
|
|
232
|
+
return 0;
|
|
233
|
+
throw new UnsupportedError('Native media ranges require width/height and px/rem thresholds.');
|
|
234
|
+
}
|
|
235
|
+
function comparison(left, operator, right) {
|
|
236
|
+
if (!operator || !['<', '<=', '=', '>', '>='].includes(operator))
|
|
237
|
+
throw new UnsupportedError('Unsupported native media comparison.');
|
|
238
|
+
return {
|
|
239
|
+
kind: 'compare',
|
|
240
|
+
left: operand(left),
|
|
241
|
+
operator: operator,
|
|
242
|
+
right: operand(right),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
if (node.type === 'FeatureRange') {
|
|
246
|
+
const first = comparison(node.left, node.leftComparison, node.middle);
|
|
247
|
+
return node.right
|
|
248
|
+
? {
|
|
249
|
+
kind: 'and',
|
|
250
|
+
queries: [
|
|
251
|
+
first,
|
|
252
|
+
comparison(node.middle, node.rightComparison, node.right),
|
|
253
|
+
],
|
|
254
|
+
}
|
|
255
|
+
: first;
|
|
256
|
+
}
|
|
257
|
+
if (node.type === 'Feature') {
|
|
258
|
+
const name = node.name.toLowerCase();
|
|
259
|
+
if (name === 'orientation' &&
|
|
260
|
+
node.value?.type === 'Identifier' &&
|
|
261
|
+
['landscape', 'portrait'].includes(node.value.name.toLowerCase()))
|
|
262
|
+
return {
|
|
263
|
+
kind: 'compare',
|
|
264
|
+
left: 'width',
|
|
265
|
+
operator: node.value.name.toLowerCase() === 'landscape' ? '>' : '<=',
|
|
266
|
+
right: 'height',
|
|
267
|
+
};
|
|
268
|
+
const match = /^(?:(min|max)-)?(height|width)$/.exec(name);
|
|
269
|
+
if (match)
|
|
270
|
+
return {
|
|
271
|
+
kind: 'compare',
|
|
272
|
+
left: match[2],
|
|
273
|
+
operator: match[1] === 'min'
|
|
274
|
+
? '>='
|
|
275
|
+
: match[1] === 'max'
|
|
276
|
+
? '<='
|
|
277
|
+
: node.value
|
|
278
|
+
? '='
|
|
279
|
+
: '>',
|
|
280
|
+
right: node.value ? operand(node.value) : 0,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
throw new UnsupportedError('Unsupported native media feature.');
|
|
284
|
+
}
|
|
285
|
+
return read(parsed);
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=NativeMedia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeMedia.js","sourceRoot":"","sources":["../../../src/compiler/internal/NativeMedia.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type * as Runtime from '../../runtime/NativeVars.js';
|
|
2
|
+
import * as Scalar from '../../react-native/internal/Scalar.js';
|
|
3
|
+
import type * as Theme from '../../internal/Theme.js';
|
|
4
|
+
/** Resolves native domains using the style compiler's unit and font mappings. */
|
|
5
|
+
export declare function compile(options: compile.Options): Runtime.create.Options;
|
|
6
|
+
/** Compiler inputs for resolved native variables. */
|
|
7
|
+
export declare namespace compile {
|
|
8
|
+
/** Complete variable catalog and explicit target mappings. */
|
|
9
|
+
type Options = Scalar.Options & {
|
|
10
|
+
/** Configuration fallback. */
|
|
11
|
+
readonly defaultVars: string;
|
|
12
|
+
/** Whether the input is a standalone definition instead of a named catalog. */
|
|
13
|
+
readonly unnamed: boolean;
|
|
14
|
+
/** Compatible authored definitions. */
|
|
15
|
+
readonly vars: Readonly<Record<string, Theme.Definition>>;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** Graph-owned profile exports and imports, excluded from public adapter options. */
|
|
19
|
+
export declare const shared: unique symbol;
|
|
20
|
+
/** Static profile artifacts belonging to one source module. */
|
|
21
|
+
export type Shared = {
|
|
22
|
+
readonly definitions: ReadonlyMap<string, string>;
|
|
23
|
+
readonly reads: ReadonlyMap<number, {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly source?: string | undefined;
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=NativeVars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeVars.d.ts","sourceRoot":"","sources":["../../../src/compiler/internal/NativeVars.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,OAAO,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,MAAM,MAAM,uCAAuC,CAAA;AAC/D,OAAO,KAAK,KAAK,KAAK,MAAM,yBAAyB,CAAA;AAIrD,iFAAiF;AACjF,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CA+LxE;AAED,qDAAqD;AACrD,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,8DAA8D;IAC9D,KAAK,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG;QAC9B,8BAA8B;QAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,+EAA+E;QAC/E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;QACzB,uCAAuC;QACvC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;KAC1D,CAAA;CACF;AAED,qFAAqF;AACrF,eAAO,MAAM,MAAM,eAAsC,CAAA;AAEzD,+DAA+D;AAC/D,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,QAAQ,CAAC,KAAK,EAAE,WAAW,CACzB,MAAM,EACN;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAChE,CAAA;CACF,CAAA"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/** Converts authored variables to static native value profiles. @module */
|
|
2
|
+
import * as Calculation from '../../react-native/internal/Calculation.js';
|
|
3
|
+
import * as Literal from '../../internal/Literal.js';
|
|
4
|
+
import * as Media from './NativeMedia.js';
|
|
5
|
+
import * as Scalar from '../../react-native/internal/Scalar.js';
|
|
6
|
+
import * as Token from '../../internal/Token.js';
|
|
7
|
+
import * as VariableSets from '../../internal/VariableSets.js';
|
|
8
|
+
/** Resolves native domains using the style compiler's unit and font mappings. */
|
|
9
|
+
export function compile(options) {
|
|
10
|
+
const media = Media.prepare(undefined, options.vars, options);
|
|
11
|
+
return {
|
|
12
|
+
defaultVars: options.defaultVars,
|
|
13
|
+
...(media
|
|
14
|
+
? {
|
|
15
|
+
media: {
|
|
16
|
+
profiles: Object.fromEntries(media.selections.map((selection) => [
|
|
17
|
+
selection,
|
|
18
|
+
compile({ ...options, vars: media.select(selection).vars })
|
|
19
|
+
.profiles,
|
|
20
|
+
])),
|
|
21
|
+
queries: media.queries,
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
: {}),
|
|
25
|
+
profiles: Object.fromEntries(Object.entries(options.vars).map((entry) => {
|
|
26
|
+
const [name, theme] = entry;
|
|
27
|
+
return [
|
|
28
|
+
name,
|
|
29
|
+
{ dark: profile(theme, 'dark'), light: profile(theme, 'light') },
|
|
30
|
+
];
|
|
31
|
+
})),
|
|
32
|
+
unnamed: options.unnamed,
|
|
33
|
+
};
|
|
34
|
+
function profile(theme, scheme) {
|
|
35
|
+
const metadata = theme[Token.definition];
|
|
36
|
+
const active = new Set();
|
|
37
|
+
const tree = Object.create(null);
|
|
38
|
+
function resolve(value) {
|
|
39
|
+
if (typeof value === 'string' || typeof value === 'number')
|
|
40
|
+
return value;
|
|
41
|
+
if (Token.is(value)) {
|
|
42
|
+
if (active.has(value))
|
|
43
|
+
throw new Error('Native token aliases must not form a cycle.');
|
|
44
|
+
const shared = metadata.contract === value.contract ||
|
|
45
|
+
(metadata.contract[Token.identity] !== undefined &&
|
|
46
|
+
metadata.contract[Token.identity] ===
|
|
47
|
+
value.contract[Token.identity]);
|
|
48
|
+
const next = shared ? metadata.values[value.path] : value.value;
|
|
49
|
+
if (next === undefined)
|
|
50
|
+
throw new Error(`Missing native token: ${value.path}.`);
|
|
51
|
+
active.add(value);
|
|
52
|
+
try {
|
|
53
|
+
return resolve(next);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
active.delete(value);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (Token.isExpression(value) && 'group' in value) {
|
|
60
|
+
const text = value.parts.map(resolve).join('');
|
|
61
|
+
return value.group === 'spacing' && /^\s*calc\(/i.test(text)
|
|
62
|
+
? `${Calculation.length(text, options) / (options.units?.px ?? 1)}px`
|
|
63
|
+
: text;
|
|
64
|
+
}
|
|
65
|
+
if ('light' in value && 'dark' in value)
|
|
66
|
+
return resolve(value[scheme]);
|
|
67
|
+
throw new Error(media
|
|
68
|
+
? 'Native media-conditioned variables require the native Provider window dimensions.'
|
|
69
|
+
: 'Media-conditioned variables require a web target.');
|
|
70
|
+
}
|
|
71
|
+
for (const [path, source] of Object.entries(metadata.values)) {
|
|
72
|
+
const parts = metadata.paths?.[path] ?? path.split('.');
|
|
73
|
+
const property = parts.at(-1);
|
|
74
|
+
const domain = VariableSets.domain(source);
|
|
75
|
+
const mappings = metadata.contract.mappings;
|
|
76
|
+
const properties = mappings === false ? undefined : mappings?.[parts[0]];
|
|
77
|
+
const category = parts[0] === 'typography' ? property : parts[0];
|
|
78
|
+
const target = category === 'radius' ? 'borderRadius' : category;
|
|
79
|
+
const targets = properties?.length
|
|
80
|
+
? properties
|
|
81
|
+
: Object.hasOwn(Scalar.properties, target)
|
|
82
|
+
? [target]
|
|
83
|
+
: [];
|
|
84
|
+
const converted = (() => {
|
|
85
|
+
try {
|
|
86
|
+
if (parts.some((part) => /^@(media|container)\s/.test(part)))
|
|
87
|
+
throw new Error('Media-conditioned variables require a web target.');
|
|
88
|
+
const value = resolve(source);
|
|
89
|
+
function convert(property) {
|
|
90
|
+
property =
|
|
91
|
+
property in Literal.aliases
|
|
92
|
+
? Literal.aliases[property]
|
|
93
|
+
: property;
|
|
94
|
+
if (!Object.hasOwn(Scalar.properties, property))
|
|
95
|
+
throw new Error(`Unsupported native property: ${property}.`);
|
|
96
|
+
if (property === 'lineHeight') {
|
|
97
|
+
if (typeof value === 'string' &&
|
|
98
|
+
(/^\s*calc\(/i.test(value) ||
|
|
99
|
+
/^\s*[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?(?:px|rem)\s*$/i.test(value)))
|
|
100
|
+
return Scalar.length(value.trim().toLowerCase(), options, false, [path]);
|
|
101
|
+
const multiplier = typeof value === 'number' ? value : Number(value);
|
|
102
|
+
if (!Number.isFinite(multiplier) ||
|
|
103
|
+
(typeof value === 'string' && !value.trim()))
|
|
104
|
+
throw new Error(`Unsupported native line height: ${value}.`);
|
|
105
|
+
const size = parts[0] === 'typography'
|
|
106
|
+
? metadata.values[[...parts.slice(0, -1), 'fontSize'].join('.')]
|
|
107
|
+
: undefined;
|
|
108
|
+
if (size === undefined)
|
|
109
|
+
throw new Error(`Native line height requires fontSize: ${path}.`);
|
|
110
|
+
return Scalar.convert('number', multiplier *
|
|
111
|
+
Scalar.length(resolve(size), options, false, [path]), options, [path]);
|
|
112
|
+
}
|
|
113
|
+
const kind = Scalar.properties[property];
|
|
114
|
+
if (typeof kind === 'string' &&
|
|
115
|
+
[
|
|
116
|
+
'fontVariant',
|
|
117
|
+
'origin',
|
|
118
|
+
'shadow',
|
|
119
|
+
'textShadow',
|
|
120
|
+
'transform',
|
|
121
|
+
].includes(kind))
|
|
122
|
+
throw new Error(`Native property ${property} does not have a scalar variable value.`);
|
|
123
|
+
if (kind === 'ratio' && typeof value !== 'number')
|
|
124
|
+
throw new Error('Native aspect ratios require numeric variable values.');
|
|
125
|
+
if (kind === 'box' || kind === 'boxSigned')
|
|
126
|
+
return Scalar.length(value, options, kind === 'boxSigned', [path]);
|
|
127
|
+
return Scalar.convert(kind, value, options, [path]);
|
|
128
|
+
}
|
|
129
|
+
if (targets.length) {
|
|
130
|
+
const values = targets.map(convert);
|
|
131
|
+
if (values.some((value) => value !== values[0]))
|
|
132
|
+
throw new Error('Mapped native properties require different converted values.');
|
|
133
|
+
return values[0];
|
|
134
|
+
}
|
|
135
|
+
if (domain === 'spacing')
|
|
136
|
+
return Scalar.length(value, options, true, [path]);
|
|
137
|
+
if (domain === 'color')
|
|
138
|
+
return Scalar.convert('color', value, options, [path]);
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return [
|
|
143
|
+
`Native variable ${path}: ${error instanceof Error ? error.message : String(error)}`,
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
})();
|
|
147
|
+
let parent = tree;
|
|
148
|
+
for (const key of parts.slice(0, -1))
|
|
149
|
+
parent = (parent[key] ??= Object.create(null));
|
|
150
|
+
parent[parts.at(-1)] = converted;
|
|
151
|
+
}
|
|
152
|
+
return tree;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Graph-owned profile exports and imports, excluded from public adapter options. */
|
|
156
|
+
export const shared = Symbol('zyzz.compiler.native.vars');
|
|
157
|
+
//# sourceMappingURL=NativeVars.js.map
|