@tamagui/babel-plugin 1.74.21 → 1.75.0
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/dist/cjs/index.js +78 -47
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.native.js +78 -47
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/esm/index.js +80 -44
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.native.js +80 -44
- package/dist/esm/index.native.js.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +114 -48
- package/types/index.d.ts.map +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -25,18 +25,15 @@ __export(src_exports, {
|
|
|
25
25
|
default: () => src_default
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(src_exports);
|
|
28
|
-
var import_path = require("path"), import_generator = __toESM(require("@babel/generator")), import_helper_plugin_utils = require("@babel/helper-plugin-utils"), import_template = __toESM(require("@babel/template")), t = __toESM(require("@babel/types")),
|
|
28
|
+
var import_path = require("path"), import_generator = __toESM(require("@babel/generator")), import_helper_plugin_utils = require("@babel/helper-plugin-utils"), import_template = __toESM(require("@babel/template")), t = __toESM(require("@babel/types")), import_static = require("@tamagui/static");
|
|
29
29
|
const importNativeView = (0, import_template.default)(`
|
|
30
30
|
const __ReactNativeView = require('react-native').View;
|
|
31
31
|
const __ReactNativeText = require('react-native').Text;
|
|
32
32
|
`), importStyleSheet = (0, import_template.default)(`
|
|
33
33
|
const __ReactNativeStyleSheet = require('react-native').StyleSheet;
|
|
34
|
-
`),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
isSimpleSpread,
|
|
38
|
-
literalToAst
|
|
39
|
-
} = require("@tamagui/static"), extractor = createExtractor();
|
|
34
|
+
`), importWithTheme = (0, import_template.default)(`
|
|
35
|
+
const __internalWithTheme = require('@tamagui/core').internalWithTheme;
|
|
36
|
+
`), extractor = (0, import_static.createExtractor)();
|
|
40
37
|
var src_default = (0, import_helper_plugin_utils.declare)(function(api, options) {
|
|
41
38
|
return api.assertVersion(7), {
|
|
42
39
|
name: "tamagui",
|
|
@@ -46,8 +43,8 @@ var src_default = (0, import_helper_plugin_utils.declare)(function(api, options)
|
|
|
46
43
|
var _a, _b, _c, _d, _e;
|
|
47
44
|
let sourcePath = this.file.opts.filename;
|
|
48
45
|
(_a = process.env.SOURCE_ROOT) != null && _a.endsWith("ios") && (sourcePath = sourcePath.replace("/ios", ""));
|
|
49
|
-
let hasImportedView = !1;
|
|
50
|
-
const sheetStyles = {}, sheetIdentifier = root.scope.generateUidIdentifier("sheet"), firstComment = ((_e = (_d = (_c = (_b = root.node.body[0]) == null ? void 0 : _b.leadingComments) == null ? void 0 : _c[0]) == null ? void 0 : _d.value) == null ? void 0 : _e.trim()) ?? "", { shouldPrintDebug, shouldDisable } = getPragmaOptions({
|
|
46
|
+
let hasImportedView = !1, hasImportedViewWrapper = !1;
|
|
47
|
+
const sheetStyles = {}, sheetIdentifier = root.scope.generateUidIdentifier("sheet"), firstComment = ((_e = (_d = (_c = (_b = root.node.body[0]) == null ? void 0 : _b.leadingComments) == null ? void 0 : _c[0]) == null ? void 0 : _d.value) == null ? void 0 : _e.trim()) ?? "", { shouldPrintDebug, shouldDisable } = (0, import_static.getPragmaOptions)({
|
|
51
48
|
disableCommentCheck: !0,
|
|
52
49
|
source: firstComment,
|
|
53
50
|
path: sourcePath
|
|
@@ -95,7 +92,7 @@ var src_default = (0, import_helper_plugin_utils.declare)(function(api, options)
|
|
|
95
92
|
// for now just turn it off entirely at a small perf loss
|
|
96
93
|
disableExtractInlineMedia: !0,
|
|
97
94
|
// disable extracting variables as no native concept of them (only theme values)
|
|
98
|
-
disableExtractVariables: "theme",
|
|
95
|
+
disableExtractVariables: options.experimentalFlattenThemesOnNative ? !1 : "theme",
|
|
99
96
|
sourcePath,
|
|
100
97
|
// disabling flattening for now
|
|
101
98
|
// it's flattening a plain <Paragraph>hello</Paragraph> which breaks things because themes
|
|
@@ -106,60 +103,93 @@ var src_default = (0, import_helper_plugin_utils.declare)(function(api, options)
|
|
|
106
103
|
return hasImportedView || (hasImportedView = !0, root.unshiftContainer("body", importNativeView())), isTextView ? "__ReactNativeText" : "__ReactNativeView";
|
|
107
104
|
},
|
|
108
105
|
onExtractTag(props) {
|
|
109
|
-
|
|
106
|
+
const { isFlattened } = props;
|
|
107
|
+
if (!isFlattened)
|
|
110
108
|
return;
|
|
111
109
|
assertValidTag(props.node);
|
|
112
|
-
const stylesExpr = t.arrayExpression([]), finalAttrs = [];
|
|
113
|
-
function
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
)
|
|
119
|
-
|
|
110
|
+
const stylesExpr = t.arrayExpression([]), finalAttrs = [], themeKeysUsed = /* @__PURE__ */ new Set();
|
|
111
|
+
function getStyleExpression(style) {
|
|
112
|
+
if (!style)
|
|
113
|
+
return;
|
|
114
|
+
const { plain, themed } = splitThemeStyles(style), ident = addSheetStyle(plain, props.node);
|
|
115
|
+
if (themed && options.experimentalFlattenThemesOnNative) {
|
|
116
|
+
for (const key in themed)
|
|
117
|
+
themeKeysUsed.add(key);
|
|
118
|
+
return t.arrayExpression([ident, addThemedStyleExpression(themed)]);
|
|
119
|
+
} else
|
|
120
|
+
return ident;
|
|
121
|
+
}
|
|
122
|
+
function addStyleExpression(expr) {
|
|
123
|
+
stylesExpr.elements.push(expr);
|
|
124
|
+
}
|
|
125
|
+
function addThemedStyleExpression(styles) {
|
|
126
|
+
const themedStylesAst = (0, import_static.literalToAst)(styles);
|
|
127
|
+
return themedStylesAst.properties.forEach((_) => {
|
|
128
|
+
const prop = _;
|
|
129
|
+
prop.value.type === "StringLiteral" && (prop.value = t.memberExpression(
|
|
130
|
+
t.identifier("theme"),
|
|
131
|
+
t.identifier(prop.value.value.slice(1))
|
|
132
|
+
));
|
|
133
|
+
}), themedStylesAst;
|
|
120
134
|
}
|
|
121
135
|
for (const attr of props.attrs)
|
|
122
136
|
switch (attr.type) {
|
|
123
137
|
case "style": {
|
|
124
|
-
|
|
125
|
-
for (const key in themed)
|
|
126
|
-
finalAttrs.push(
|
|
127
|
-
t.jsxAttribute(
|
|
128
|
-
t.jsxIdentifier(key),
|
|
129
|
-
t.stringLiteral(themed[key])
|
|
130
|
-
)
|
|
131
|
-
);
|
|
132
|
-
const ident = addSheetStyle(plain, props.node);
|
|
133
|
-
addStyle(ident, (0, import_simple_hash.simpleHash)(JSON.stringify(plain)));
|
|
138
|
+
addStyleExpression(getStyleExpression(attr.value));
|
|
134
139
|
break;
|
|
135
140
|
}
|
|
136
141
|
case "ternary": {
|
|
137
|
-
const { consequent, alternate } = attr.value,
|
|
142
|
+
const { consequent, alternate } = attr.value, consExpr = getStyleExpression(consequent), altExpr = getStyleExpression(alternate), styleExpr = t.conditionalExpression(
|
|
138
143
|
attr.value.test,
|
|
139
|
-
|
|
140
|
-
|
|
144
|
+
consExpr || t.nullLiteral(),
|
|
145
|
+
altExpr || t.nullLiteral()
|
|
141
146
|
);
|
|
142
|
-
|
|
143
|
-
styleExpr
|
|
144
|
-
|
|
147
|
+
addStyleExpression(
|
|
148
|
+
styleExpr
|
|
149
|
+
// isFlattened ? simpleHash(JSON.stringify({ consequent, alternate })) : undefined
|
|
145
150
|
);
|
|
146
151
|
break;
|
|
147
152
|
}
|
|
148
153
|
case "attr": {
|
|
149
|
-
t.isJSXSpreadAttribute(attr.value) && isSimpleSpread(attr.value) && stylesExpr.elements.push(
|
|
154
|
+
t.isJSXSpreadAttribute(attr.value) && (0, import_static.isSimpleSpread)(attr.value) && stylesExpr.elements.push(
|
|
150
155
|
t.memberExpression(attr.value.argument, t.identifier("style"))
|
|
151
156
|
), finalAttrs.push(attr.value);
|
|
152
157
|
break;
|
|
153
158
|
}
|
|
154
159
|
}
|
|
155
|
-
props.node.attributes = finalAttrs, props.isFlattened
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
|
|
160
|
+
if (props.node.attributes = finalAttrs, props.isFlattened)
|
|
161
|
+
if (themeKeysUsed.size) {
|
|
162
|
+
hasImportedViewWrapper || (root.unshiftContainer("body", importWithTheme()), hasImportedViewWrapper = !0);
|
|
163
|
+
const name = props.node.name.name, WrapperIdentifier = root.scope.generateUidIdentifier(
|
|
164
|
+
name + "Wrapper"
|
|
165
|
+
);
|
|
166
|
+
root.pushContainer(
|
|
167
|
+
"body",
|
|
168
|
+
t.variableDeclaration("const", [
|
|
169
|
+
t.variableDeclarator(
|
|
170
|
+
WrapperIdentifier,
|
|
171
|
+
t.callExpression(t.identifier("__internalWithTheme"), [
|
|
172
|
+
t.identifier(name),
|
|
173
|
+
t.arrowFunctionExpression(
|
|
174
|
+
[t.identifier("theme")],
|
|
175
|
+
t.blockStatement([t.returnStatement(stylesExpr)])
|
|
176
|
+
),
|
|
177
|
+
t.arrayExpression(
|
|
178
|
+
[...themeKeysUsed].map((k) => t.stringLiteral(k))
|
|
179
|
+
)
|
|
180
|
+
])
|
|
181
|
+
)
|
|
182
|
+
])
|
|
183
|
+
), props.node.name = WrapperIdentifier;
|
|
184
|
+
} else
|
|
185
|
+
props.node.attributes.push(
|
|
186
|
+
t.jsxAttribute(
|
|
187
|
+
t.jsxIdentifier("style"),
|
|
188
|
+
t.jsxExpressionContainer(
|
|
189
|
+
stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr
|
|
190
|
+
)
|
|
191
|
+
)
|
|
192
|
+
);
|
|
163
193
|
}
|
|
164
194
|
});
|
|
165
195
|
} catch (err) {
|
|
@@ -173,7 +203,7 @@ var src_default = (0, import_helper_plugin_utils.declare)(function(api, options)
|
|
|
173
203
|
shouldPrintDebug && console.info("END no styles");
|
|
174
204
|
return;
|
|
175
205
|
}
|
|
176
|
-
const sheetObject = literalToAst(sheetStyles), sheetOuter = (0, import_template.default)(
|
|
206
|
+
const sheetObject = (0, import_static.literalToAst)(sheetStyles), sheetOuter = (0, import_template.default)(
|
|
177
207
|
"const SHEET = __ReactNativeStyleSheet.create(null)"
|
|
178
208
|
)({
|
|
179
209
|
SHEET: sheetIdentifier.name
|
|
@@ -196,10 +226,11 @@ function assertValidTag(node) {
|
|
|
196
226
|
}
|
|
197
227
|
function splitThemeStyles(style) {
|
|
198
228
|
const themed = {}, plain = {};
|
|
229
|
+
let noTheme = !0;
|
|
199
230
|
for (const key in style) {
|
|
200
231
|
const val = style[key];
|
|
201
|
-
val && val[0] === "$" ? themed[key] = val : plain[key] = val;
|
|
232
|
+
val && val[0] === "$" ? (themed[key] = val, noTheme = !1) : plain[key] = val;
|
|
202
233
|
}
|
|
203
|
-
return { themed, plain };
|
|
234
|
+
return { themed: noTheme ? null : themed, plain };
|
|
204
235
|
}
|
|
205
236
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAyB,iBAEzB,mBAAsB,sCACtB,6BAAwB,uCACxB,kBAAqB,qCAErB,IAAmB,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["template", "generator"]
|
|
6
6
|
}
|
package/dist/cjs/index.native.js
CHANGED
|
@@ -26,18 +26,15 @@ __export(src_exports, {
|
|
|
26
26
|
default: () => src_default
|
|
27
27
|
});
|
|
28
28
|
module.exports = __toCommonJS(src_exports);
|
|
29
|
-
var import_path = require("path"), import_generator = __toESM(require("@babel/generator")), import_helper_plugin_utils = require("@babel/helper-plugin-utils"), import_template = __toESM(require("@babel/template")), t = __toESM(require("@babel/types")),
|
|
29
|
+
var import_path = require("path"), import_generator = __toESM(require("@babel/generator")), import_helper_plugin_utils = require("@babel/helper-plugin-utils"), import_template = __toESM(require("@babel/template")), t = __toESM(require("@babel/types")), import_static = require("@tamagui/static");
|
|
30
30
|
const importNativeView = (0, import_template.default)(`
|
|
31
31
|
const __ReactNativeView = require('react-native').View;
|
|
32
32
|
const __ReactNativeText = require('react-native').Text;
|
|
33
33
|
`), importStyleSheet = (0, import_template.default)(`
|
|
34
34
|
const __ReactNativeStyleSheet = require('react-native').StyleSheet;
|
|
35
|
-
`),
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
isSimpleSpread,
|
|
39
|
-
literalToAst
|
|
40
|
-
} = require("@tamagui/static"), extractor = createExtractor();
|
|
35
|
+
`), importWithTheme = (0, import_template.default)(`
|
|
36
|
+
const __internalWithTheme = require('@tamagui/core').internalWithTheme;
|
|
37
|
+
`), extractor = (0, import_static.createExtractor)();
|
|
41
38
|
var src_default = (0, import_helper_plugin_utils.declare)(function(api, options) {
|
|
42
39
|
return api.assertVersion(7), {
|
|
43
40
|
name: "tamagui",
|
|
@@ -47,8 +44,8 @@ var src_default = (0, import_helper_plugin_utils.declare)(function(api, options)
|
|
|
47
44
|
var _a, _b, _c, _d, _e;
|
|
48
45
|
let sourcePath = this.file.opts.filename;
|
|
49
46
|
(_a = process.env.SOURCE_ROOT) != null && _a.endsWith("ios") && (sourcePath = sourcePath.replace("/ios", ""));
|
|
50
|
-
let hasImportedView = !1;
|
|
51
|
-
const sheetStyles = {}, sheetIdentifier = root.scope.generateUidIdentifier("sheet"), firstComment = ((_e = (_d = (_c = (_b = root.node.body[0]) == null ? void 0 : _b.leadingComments) == null ? void 0 : _c[0]) == null ? void 0 : _d.value) == null ? void 0 : _e.trim()) ?? "", { shouldPrintDebug, shouldDisable } = getPragmaOptions({
|
|
47
|
+
let hasImportedView = !1, hasImportedViewWrapper = !1;
|
|
48
|
+
const sheetStyles = {}, sheetIdentifier = root.scope.generateUidIdentifier("sheet"), firstComment = ((_e = (_d = (_c = (_b = root.node.body[0]) == null ? void 0 : _b.leadingComments) == null ? void 0 : _c[0]) == null ? void 0 : _d.value) == null ? void 0 : _e.trim()) ?? "", { shouldPrintDebug, shouldDisable } = (0, import_static.getPragmaOptions)({
|
|
52
49
|
disableCommentCheck: !0,
|
|
53
50
|
source: firstComment,
|
|
54
51
|
path: sourcePath
|
|
@@ -96,7 +93,7 @@ var src_default = (0, import_helper_plugin_utils.declare)(function(api, options)
|
|
|
96
93
|
// for now just turn it off entirely at a small perf loss
|
|
97
94
|
disableExtractInlineMedia: !0,
|
|
98
95
|
// disable extracting variables as no native concept of them (only theme values)
|
|
99
|
-
disableExtractVariables: "theme",
|
|
96
|
+
disableExtractVariables: options.experimentalFlattenThemesOnNative ? !1 : "theme",
|
|
100
97
|
sourcePath,
|
|
101
98
|
// disabling flattening for now
|
|
102
99
|
// it's flattening a plain <Paragraph>hello</Paragraph> which breaks things because themes
|
|
@@ -107,60 +104,93 @@ var src_default = (0, import_helper_plugin_utils.declare)(function(api, options)
|
|
|
107
104
|
return hasImportedView || (hasImportedView = !0, root.unshiftContainer("body", importNativeView())), isTextView ? "__ReactNativeText" : "__ReactNativeView";
|
|
108
105
|
},
|
|
109
106
|
onExtractTag(props) {
|
|
110
|
-
|
|
107
|
+
const { isFlattened } = props;
|
|
108
|
+
if (!isFlattened)
|
|
111
109
|
return;
|
|
112
110
|
assertValidTag(props.node);
|
|
113
|
-
const stylesExpr = t.arrayExpression([]), finalAttrs = [];
|
|
114
|
-
function
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
)
|
|
120
|
-
|
|
111
|
+
const stylesExpr = t.arrayExpression([]), finalAttrs = [], themeKeysUsed = /* @__PURE__ */ new Set();
|
|
112
|
+
function getStyleExpression(style) {
|
|
113
|
+
if (!style)
|
|
114
|
+
return;
|
|
115
|
+
const { plain, themed } = splitThemeStyles(style), ident = addSheetStyle(plain, props.node);
|
|
116
|
+
if (themed && options.experimentalFlattenThemesOnNative) {
|
|
117
|
+
for (const key in themed)
|
|
118
|
+
themeKeysUsed.add(key);
|
|
119
|
+
return t.arrayExpression([ident, addThemedStyleExpression(themed)]);
|
|
120
|
+
} else
|
|
121
|
+
return ident;
|
|
122
|
+
}
|
|
123
|
+
function addStyleExpression(expr) {
|
|
124
|
+
stylesExpr.elements.push(expr);
|
|
125
|
+
}
|
|
126
|
+
function addThemedStyleExpression(styles) {
|
|
127
|
+
const themedStylesAst = (0, import_static.literalToAst)(styles);
|
|
128
|
+
return themedStylesAst.properties.forEach((_) => {
|
|
129
|
+
const prop = _;
|
|
130
|
+
prop.value.type === "StringLiteral" && (prop.value = t.memberExpression(
|
|
131
|
+
t.identifier("theme"),
|
|
132
|
+
t.identifier(prop.value.value.slice(1))
|
|
133
|
+
));
|
|
134
|
+
}), themedStylesAst;
|
|
121
135
|
}
|
|
122
136
|
for (const attr of props.attrs)
|
|
123
137
|
switch (attr.type) {
|
|
124
138
|
case "style": {
|
|
125
|
-
|
|
126
|
-
for (const key in themed)
|
|
127
|
-
finalAttrs.push(
|
|
128
|
-
t.jsxAttribute(
|
|
129
|
-
t.jsxIdentifier(key),
|
|
130
|
-
t.stringLiteral(themed[key])
|
|
131
|
-
)
|
|
132
|
-
);
|
|
133
|
-
const ident = addSheetStyle(plain, props.node);
|
|
134
|
-
addStyle(ident, (0, import_simple_hash.simpleHash)(JSON.stringify(plain)));
|
|
139
|
+
addStyleExpression(getStyleExpression(attr.value));
|
|
135
140
|
break;
|
|
136
141
|
}
|
|
137
142
|
case "ternary": {
|
|
138
|
-
const { consequent, alternate } = attr.value,
|
|
143
|
+
const { consequent, alternate } = attr.value, consExpr = getStyleExpression(consequent), altExpr = getStyleExpression(alternate), styleExpr = t.conditionalExpression(
|
|
139
144
|
attr.value.test,
|
|
140
|
-
|
|
141
|
-
|
|
145
|
+
consExpr || t.nullLiteral(),
|
|
146
|
+
altExpr || t.nullLiteral()
|
|
142
147
|
);
|
|
143
|
-
|
|
144
|
-
styleExpr
|
|
145
|
-
|
|
148
|
+
addStyleExpression(
|
|
149
|
+
styleExpr
|
|
150
|
+
// isFlattened ? simpleHash(JSON.stringify({ consequent, alternate })) : undefined
|
|
146
151
|
);
|
|
147
152
|
break;
|
|
148
153
|
}
|
|
149
154
|
case "attr": {
|
|
150
|
-
t.isJSXSpreadAttribute(attr.value) && isSimpleSpread(attr.value) && stylesExpr.elements.push(
|
|
155
|
+
t.isJSXSpreadAttribute(attr.value) && (0, import_static.isSimpleSpread)(attr.value) && stylesExpr.elements.push(
|
|
151
156
|
t.memberExpression(attr.value.argument, t.identifier("style"))
|
|
152
157
|
), finalAttrs.push(attr.value);
|
|
153
158
|
break;
|
|
154
159
|
}
|
|
155
160
|
}
|
|
156
|
-
props.node.attributes = finalAttrs, props.isFlattened
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
|
|
161
|
+
if (props.node.attributes = finalAttrs, props.isFlattened)
|
|
162
|
+
if (themeKeysUsed.size) {
|
|
163
|
+
hasImportedViewWrapper || (root.unshiftContainer("body", importWithTheme()), hasImportedViewWrapper = !0);
|
|
164
|
+
const name = props.node.name.name, WrapperIdentifier = root.scope.generateUidIdentifier(
|
|
165
|
+
name + "Wrapper"
|
|
166
|
+
);
|
|
167
|
+
root.pushContainer(
|
|
168
|
+
"body",
|
|
169
|
+
t.variableDeclaration("const", [
|
|
170
|
+
t.variableDeclarator(
|
|
171
|
+
WrapperIdentifier,
|
|
172
|
+
t.callExpression(t.identifier("__internalWithTheme"), [
|
|
173
|
+
t.identifier(name),
|
|
174
|
+
t.arrowFunctionExpression(
|
|
175
|
+
[t.identifier("theme")],
|
|
176
|
+
t.blockStatement([t.returnStatement(stylesExpr)])
|
|
177
|
+
),
|
|
178
|
+
t.arrayExpression(
|
|
179
|
+
[...themeKeysUsed].map((k) => t.stringLiteral(k))
|
|
180
|
+
)
|
|
181
|
+
])
|
|
182
|
+
)
|
|
183
|
+
])
|
|
184
|
+
), props.node.name = WrapperIdentifier;
|
|
185
|
+
} else
|
|
186
|
+
props.node.attributes.push(
|
|
187
|
+
t.jsxAttribute(
|
|
188
|
+
t.jsxIdentifier("style"),
|
|
189
|
+
t.jsxExpressionContainer(
|
|
190
|
+
stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr
|
|
191
|
+
)
|
|
192
|
+
)
|
|
193
|
+
);
|
|
164
194
|
}
|
|
165
195
|
});
|
|
166
196
|
} catch (err) {
|
|
@@ -174,7 +204,7 @@ var src_default = (0, import_helper_plugin_utils.declare)(function(api, options)
|
|
|
174
204
|
shouldPrintDebug && console.info("END no styles");
|
|
175
205
|
return;
|
|
176
206
|
}
|
|
177
|
-
const sheetObject = literalToAst(sheetStyles), sheetOuter = (0, import_template.default)(
|
|
207
|
+
const sheetObject = (0, import_static.literalToAst)(sheetStyles), sheetOuter = (0, import_template.default)(
|
|
178
208
|
"const SHEET = __ReactNativeStyleSheet.create(null)"
|
|
179
209
|
)({
|
|
180
210
|
SHEET: sheetIdentifier.name
|
|
@@ -197,10 +227,11 @@ function assertValidTag(node) {
|
|
|
197
227
|
}
|
|
198
228
|
function splitThemeStyles(style) {
|
|
199
229
|
const themed = {}, plain = {};
|
|
230
|
+
let noTheme = !0;
|
|
200
231
|
for (const key in style) {
|
|
201
232
|
const val = style[key];
|
|
202
|
-
val && val[0] === "$" ? themed[key] = val : plain[key] = val;
|
|
233
|
+
val && val[0] === "$" ? (themed[key] = val, noTheme = !1) : plain[key] = val;
|
|
203
234
|
}
|
|
204
|
-
return { themed, plain };
|
|
235
|
+
return { themed: noTheme ? null : themed, plain };
|
|
205
236
|
}
|
|
206
237
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAyB,iBAEzB,mBAAsB,sCACtB,6BAAwB,uCACxB,kBAAqB,qCAErB,IAAmB,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAyB,iBAEzB,mBAAsB,sCACtB,6BAAwB,uCACxB,kBAAqB,qCAErB,IAAmB,kCAEnB,gBAKO;AAGP,MAAM,uBAAmB,gBAAAA,SAAS;AAAA;AAAA;AAAA,CAGjC,GAEK,uBAAmB,gBAAAA,SAAS;AAAA;AAAA,CAEjC,GAEK,sBAAkB,gBAAAA,SAAS;AAAA;AAAA,CAEhC,GAEK,gBAAY,+BAAgB;AAElC,IAAO,kBAAQ,oCAAQ,SACrB,KACA,SAIA;AACA,aAAI,cAAc,CAAC,GAEZ;AAAA,IACL,MAAM;AAAA,IAEN,SAAS;AAAA,MACP,SAAS;AAAA,QACP,MAAiB,MAAM;AA7C/B;AA8CU,cAAI,aAAa,KAAK,KAAK,KAAK;AAIhC,WAAI,aAAQ,IAAI,gBAAZ,WAAyB,SAAS,WACpC,aAAa,WAAW,QAAQ,QAAQ,EAAE;AAG5C,cAAI,kBAAkB,IAClB,yBAAyB;AAC7B,gBAAM,cAAc,CAAC,GACf,kBAAkB,KAAK,MAAM,sBAAsB,OAAO,GAC1D,iBACJ,4BAAK,KAAK,KAAK,CAAC,MAAhB,mBAAmB,oBAAnB,mBAAqC,OAArC,mBAAyC,UAAzC,mBAAgD,WAAU,IACtD,EAAE,kBAAkB,cAAc,QAAI,gCAAiB;AAAA,YAC3D,qBAAqB;AAAA,YACrB,QAAQ;AAAA,YACR,MAAM;AAAA,UACR,CAAC;AAED,cAAI;AACF;AAGF,mBAAS,cAAc,OAAY,MAA2B;AAE5D,gBAAI,MAAM,GADS,GAAG,OAAO,KAAK,WAAW,EAAE,MAAM,EAC9B;AACvB,gBAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,oBAAM,cAAc,KAAK,MACrB,KAAK,IAAI,MAAM,QACd,KAAK,IAAI,MAAM,SAAS,KAAK,IAAI,IAAI,OAClC,IAAI,KAAK,IAAI,IAAI,IAAI,KACrB,MACJ;AACJ,qBAAO,QAAI,sBAAS,UAAU,CAAC,IAAI,WAAW;AAAA,YAChD;AACA,+BAAY,GAAG,IAAI,OACZ,cAAc,GAAG;AAAA,UAC1B;AAEA,mBAAS,cAAc,KAAa;AAClC,uBAAO,gBAAAA,SAAS,cAAc,EAAE;AAAA,cAC9B,OAAO,gBAAgB;AAAA,cACvB,KAAK;AAAA,YACP,CAAC,EAAE;AAAA,UACL;AAEA,cAAI;AACF,sBAAU,UAAU,MAAM;AAAA;AAAA,cAExB,UAAU;AAAA,cACV;AAAA,cACA,kBAAkB,CAAC,gBAAgB,WAAW;AAAA,cAC9C,YAAY,oBAAI,IAAI;AAAA,gBAClB;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,CAAC;AAAA,cACD,0BAA0B,QAAQ;AAAA,cAClC,cAAc,oBAAI,IAAI;AAAA,gBACpB;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,CAAC;AAAA,cACD,GAAG;AAAA;AAAA;AAAA;AAAA,cAIH,2BAA2B;AAAA;AAAA,cAE3B,yBAAyB,QAAQ,oCAC7B,KACA;AAAA,cACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQA,iBAAiB,EAAE,WAAW,GAAG;AAC/B,uBAAK,oBACH,kBAAkB,IAClB,KAAK,iBAAiB,QAAQ,iBAAiB,CAAC,IAE3C,aAAa,sBAAsB;AAAA,cAC5C;AAAA,cAEA,aAAa,OAAO;AAClB,sBAAM,EAAE,YAAY,IAAI;AAExB,oBAAI,CAAC;AAEH;AAGF,+BAAe,MAAM,IAAI;AACzB,sBAAM,aAAa,EAAE,gBAAgB,CAAC,CAAC,GACjC,aAAwD,CAAC,GACzD,gBAAgB,oBAAI,IAAY;AAEtC,yBAAS,mBAAmB,OAAsB;AAChD,sBAAI,CAAC;AAAO;AAGZ,wBAAM,EAAE,OAAO,OAAO,IAAI,iBAAiB,KAAK,GAE1C,QAAQ,cAAc,OAAO,MAAM,IAAI;AAE7C,sBAAI,UAAU,QAAQ,mCAAmC;AACvD,+BAAW,OAAO;AAChB,oCAAc,IAAI,GAAG;AAIvB,2BAAO,EAAE,gBAAgB,CAAC,OAAO,yBAAyB,MAAM,CAAC,CAAC;AAAA,kBACpE;AAEE,2BAAO;AAAA,gBAIX;AAEA,yBAAS,mBAAmB,MAAW;AACrC,6BAAW,SAAS,KAAK,IAAI;AAAA,gBAC/B;AAEA,yBAAS,yBAAyB,QAAgB;AAChD,wBAAM,sBAAkB,4BAAa,MAAM;AAC3C,yCAAgB,WAAW,QAAQ,CAAC,MAAM;AACxC,0BAAM,OAAO;AACb,oBAAI,KAAK,MAAM,SAAS,oBACtB,KAAK,QAAQ,EAAE;AAAA,sBACb,EAAE,WAAW,OAAO;AAAA,sBACpB,EAAE,WAAW,KAAK,MAAM,MAAM,MAAM,CAAC,CAAC;AAAA,oBACxC;AAAA,kBAEJ,CAAC,GACM;AAAA,gBACT;AAEA,2BAAW,QAAQ,MAAM;AACvB,0BAAQ,KAAK,MAAM;AAAA,oBACjB,KAAK,SAAS;AACZ,yCAAmB,mBAAmB,KAAK,KAAK,CAAC;AACjD;AAAA,oBACF;AAAA,oBACA,KAAK,WAAW;AACd,4BAAM,EAAE,YAAY,UAAU,IAAI,KAAK,OAEjC,WAAW,mBAAmB,UAAU,GACxC,UAAU,mBAAmB,SAAS,GAEtC,YAAY,EAAE;AAAA,wBAClB,KAAK,MAAM;AAAA,wBACX,YAAY,EAAE,YAAY;AAAA,wBAC1B,WAAW,EAAE,YAAY;AAAA,sBAC3B;AACA;AAAA,wBACE;AAAA;AAAA,sBAEF;AACA;AAAA,oBACF;AAAA,oBACA,KAAK,QAAQ;AACX,sBAAI,EAAE,qBAAqB,KAAK,KAAK,SAC/B,8BAAe,KAAK,KAAK,KAC3B,WAAW,SAAS;AAAA,wBAClB,EAAE,iBAAiB,KAAK,MAAM,UAAU,EAAE,WAAW,OAAO,CAAC;AAAA,sBAC/D,GAGJ,WAAW,KAAK,KAAK,KAAK;AAC1B;AAAA,oBACF;AAAA,kBACF;AAKF,oBAFA,MAAM,KAAK,aAAa,YAEpB,MAAM;AACR,sBAAI,cAAc,MAAM;AACtB,oBAAK,2BACH,KAAK,iBAAiB,QAAQ,gBAAgB,CAAC,GAC/C,yBAAyB;AAG3B,0BAAM,OAAO,MAAM,KAAK,KAAK,MACvB,oBAAoB,KAAK,MAAM;AAAA,sBACnC,OAAO;AAAA,oBACT;AAEA,yBAAK;AAAA,sBACH;AAAA,sBACA,EAAE,oBAAoB,SAAS;AAAA,wBAC7B,EAAE;AAAA,0BACA;AAAA,0BACA,EAAE,eAAe,EAAE,WAAW,qBAAqB,GAAG;AAAA,4BACpD,EAAE,WAAW,IAAI;AAAA,4BACjB,EAAE;AAAA,8BACA,CAAC,EAAE,WAAW,OAAO,CAAC;AAAA,8BACtB,EAAE,eAAe,CAAC,EAAE,gBAAgB,UAAU,CAAC,CAAC;AAAA,4BAClD;AAAA,4BACA,EAAE;AAAA,8BACA,CAAC,GAAG,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAAA,4BAClD;AAAA,0BACF,CAAC;AAAA,wBACH;AAAA,sBACF,CAAC;AAAA,oBACH,GAGA,MAAM,KAAK,OAAO;AAAA,kBACpB;AACE,0BAAM,KAAK,WAAW;AAAA,sBACpB,EAAE;AAAA,wBACA,EAAE,cAAc,OAAO;AAAA,wBACvB,EAAE;AAAA,0BACA,WAAW,SAAS,WAAW,IAC1B,WAAW,SAAS,CAAC,IACtB;AAAA,wBACN;AAAA,sBACF;AAAA,oBACF;AAAA,cAGN;AAAA,YACF,CAAC;AAAA,UACH,SAAS,KAAK;AACZ,gBAAI,eAAe,OAAO;AAExB,kBAAI,UAAU,GAAG,qBAAqB,YAAY,MAAM,IAAI,OAAO;AACnE,cAAI,QAAQ,SAAS,6CAA6C,MAChE,UAAU,gDAEZ,QAAQ,KAAK,oCAAoC,SAAS,IAAI,KAAK;AACnE;AAAA,YACF;AAAA,UACF;AAEA,cAAI,CAAC,OAAO,KAAK,WAAW,EAAE,QAAQ;AACpC,YAAI,oBACF,QAAQ,KAAK,eAAe;AAE9B;AAAA,UACF;AAEA,gBAAM,kBAAc,4BAAa,WAAW,GACtC,iBAAa,gBAAAA;AAAA,YACjB;AAAA,UACF,EAAE;AAAA,YACA,OAAO,gBAAgB;AAAA,UACzB,CAAC;AAGD,qBAAW,aAAa,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,aAC/C,KAAK,iBAAiB,QAAQ,UAAU,GAExC,KAAK,iBAAiB,QAAQ,iBAAiB,CAAC,GAE5C,qBACF,QAAQ,KAAK;AAAA;AAAA,CAAoC,GACjD,QAAQ;AAAA,gBACN,iBAAAC,SAAU,KAAK,MAAM,EAClB,KAAK,MAAM;AAAA,CAAI,EACf,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,IAAI,CAAC,EACjC,KAAK;AAAA,CAAI;AAAA,UACd;AAAA,QAEJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,SAAS,eAAe,MAA2B;AAvUnD;AAwUE,EAAI,KAAK,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,KAAK,SAAS,OAAO,MAG9E,aAAQ,IAAI,UAAZ,WAAmB,WAAW,cAChC,QAAQ,KAAK,6DAAmD;AAGtE;AAEA,SAAS,iBAAiB,OAAe;AACvC,QAAM,SAAiB,CAAC,GAClB,QAAgB,CAAC;AACvB,MAAI,UAAU;AACd,aAAW,OAAO,OAAO;AACvB,UAAM,MAAM,MAAM,GAAG;AACrB,IAAI,OAAO,IAAI,CAAC,MAAM,OACpB,OAAO,GAAG,IAAI,KACd,UAAU,MAEV,MAAM,GAAG,IAAI;AAAA,EAEjB;AACA,SAAO,EAAE,QAAQ,UAAU,OAAO,QAAQ,MAAM;AAClD;",
|
|
5
5
|
"names": ["template", "generator"]
|
|
6
6
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -3,18 +3,20 @@ import generator from "@babel/generator";
|
|
|
3
3
|
import { declare } from "@babel/helper-plugin-utils";
|
|
4
4
|
import template from "@babel/template";
|
|
5
5
|
import * as t from "@babel/types";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
createExtractor,
|
|
8
|
+
getPragmaOptions,
|
|
9
|
+
isSimpleSpread,
|
|
10
|
+
literalToAst
|
|
11
|
+
} from "@tamagui/static";
|
|
7
12
|
const importNativeView = template(`
|
|
8
13
|
const __ReactNativeView = require('react-native').View;
|
|
9
14
|
const __ReactNativeText = require('react-native').Text;
|
|
10
15
|
`), importStyleSheet = template(`
|
|
11
16
|
const __ReactNativeStyleSheet = require('react-native').StyleSheet;
|
|
12
|
-
`),
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
isSimpleSpread,
|
|
16
|
-
literalToAst
|
|
17
|
-
} = require("@tamagui/static"), extractor = createExtractor();
|
|
17
|
+
`), importWithTheme = template(`
|
|
18
|
+
const __internalWithTheme = require('@tamagui/core').internalWithTheme;
|
|
19
|
+
`), extractor = createExtractor();
|
|
18
20
|
var src_default = declare(function(api, options) {
|
|
19
21
|
return api.assertVersion(7), {
|
|
20
22
|
name: "tamagui",
|
|
@@ -23,7 +25,7 @@ var src_default = declare(function(api, options) {
|
|
|
23
25
|
enter(root) {
|
|
24
26
|
let sourcePath = this.file.opts.filename;
|
|
25
27
|
process.env.SOURCE_ROOT?.endsWith("ios") && (sourcePath = sourcePath.replace("/ios", ""));
|
|
26
|
-
let hasImportedView = !1;
|
|
28
|
+
let hasImportedView = !1, hasImportedViewWrapper = !1;
|
|
27
29
|
const sheetStyles = {}, sheetIdentifier = root.scope.generateUidIdentifier("sheet"), firstComment = root.node.body[0]?.leadingComments?.[0]?.value?.trim() ?? "", { shouldPrintDebug, shouldDisable } = getPragmaOptions({
|
|
28
30
|
disableCommentCheck: !0,
|
|
29
31
|
source: firstComment,
|
|
@@ -72,7 +74,7 @@ var src_default = declare(function(api, options) {
|
|
|
72
74
|
// for now just turn it off entirely at a small perf loss
|
|
73
75
|
disableExtractInlineMedia: !0,
|
|
74
76
|
// disable extracting variables as no native concept of them (only theme values)
|
|
75
|
-
disableExtractVariables: "theme",
|
|
77
|
+
disableExtractVariables: options.experimentalFlattenThemesOnNative ? !1 : "theme",
|
|
76
78
|
sourcePath,
|
|
77
79
|
// disabling flattening for now
|
|
78
80
|
// it's flattening a plain <Paragraph>hello</Paragraph> which breaks things because themes
|
|
@@ -83,42 +85,50 @@ var src_default = declare(function(api, options) {
|
|
|
83
85
|
return hasImportedView || (hasImportedView = !0, root.unshiftContainer("body", importNativeView())), isTextView ? "__ReactNativeText" : "__ReactNativeView";
|
|
84
86
|
},
|
|
85
87
|
onExtractTag(props) {
|
|
86
|
-
|
|
88
|
+
const { isFlattened } = props;
|
|
89
|
+
if (!isFlattened)
|
|
87
90
|
return;
|
|
88
91
|
assertValidTag(props.node);
|
|
89
|
-
const stylesExpr = t.arrayExpression([]), finalAttrs = [];
|
|
90
|
-
function
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
)
|
|
96
|
-
|
|
92
|
+
const stylesExpr = t.arrayExpression([]), finalAttrs = [], themeKeysUsed = /* @__PURE__ */ new Set();
|
|
93
|
+
function getStyleExpression(style) {
|
|
94
|
+
if (!style)
|
|
95
|
+
return;
|
|
96
|
+
const { plain, themed } = splitThemeStyles(style), ident = addSheetStyle(plain, props.node);
|
|
97
|
+
if (themed && options.experimentalFlattenThemesOnNative) {
|
|
98
|
+
for (const key in themed)
|
|
99
|
+
themeKeysUsed.add(key);
|
|
100
|
+
return t.arrayExpression([ident, addThemedStyleExpression(themed)]);
|
|
101
|
+
} else
|
|
102
|
+
return ident;
|
|
103
|
+
}
|
|
104
|
+
function addStyleExpression(expr) {
|
|
105
|
+
stylesExpr.elements.push(expr);
|
|
106
|
+
}
|
|
107
|
+
function addThemedStyleExpression(styles) {
|
|
108
|
+
const themedStylesAst = literalToAst(styles);
|
|
109
|
+
return themedStylesAst.properties.forEach((_) => {
|
|
110
|
+
const prop = _;
|
|
111
|
+
prop.value.type === "StringLiteral" && (prop.value = t.memberExpression(
|
|
112
|
+
t.identifier("theme"),
|
|
113
|
+
t.identifier(prop.value.value.slice(1))
|
|
114
|
+
));
|
|
115
|
+
}), themedStylesAst;
|
|
97
116
|
}
|
|
98
117
|
for (const attr of props.attrs)
|
|
99
118
|
switch (attr.type) {
|
|
100
119
|
case "style": {
|
|
101
|
-
|
|
102
|
-
for (const key in themed)
|
|
103
|
-
finalAttrs.push(
|
|
104
|
-
t.jsxAttribute(
|
|
105
|
-
t.jsxIdentifier(key),
|
|
106
|
-
t.stringLiteral(themed[key])
|
|
107
|
-
)
|
|
108
|
-
);
|
|
109
|
-
const ident = addSheetStyle(plain, props.node);
|
|
110
|
-
addStyle(ident, simpleHash(JSON.stringify(plain)));
|
|
120
|
+
addStyleExpression(getStyleExpression(attr.value));
|
|
111
121
|
break;
|
|
112
122
|
}
|
|
113
123
|
case "ternary": {
|
|
114
|
-
const { consequent, alternate } = attr.value,
|
|
124
|
+
const { consequent, alternate } = attr.value, consExpr = getStyleExpression(consequent), altExpr = getStyleExpression(alternate), styleExpr = t.conditionalExpression(
|
|
115
125
|
attr.value.test,
|
|
116
|
-
|
|
117
|
-
|
|
126
|
+
consExpr || t.nullLiteral(),
|
|
127
|
+
altExpr || t.nullLiteral()
|
|
118
128
|
);
|
|
119
|
-
|
|
120
|
-
styleExpr
|
|
121
|
-
simpleHash(JSON.stringify({ consequent, alternate }))
|
|
129
|
+
addStyleExpression(
|
|
130
|
+
styleExpr
|
|
131
|
+
// isFlattened ? simpleHash(JSON.stringify({ consequent, alternate })) : undefined
|
|
122
132
|
);
|
|
123
133
|
break;
|
|
124
134
|
}
|
|
@@ -129,14 +139,39 @@ var src_default = declare(function(api, options) {
|
|
|
129
139
|
break;
|
|
130
140
|
}
|
|
131
141
|
}
|
|
132
|
-
props.node.attributes = finalAttrs, props.isFlattened
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
if (props.node.attributes = finalAttrs, props.isFlattened)
|
|
143
|
+
if (themeKeysUsed.size) {
|
|
144
|
+
hasImportedViewWrapper || (root.unshiftContainer("body", importWithTheme()), hasImportedViewWrapper = !0);
|
|
145
|
+
const name = props.node.name.name, WrapperIdentifier = root.scope.generateUidIdentifier(
|
|
146
|
+
name + "Wrapper"
|
|
147
|
+
);
|
|
148
|
+
root.pushContainer(
|
|
149
|
+
"body",
|
|
150
|
+
t.variableDeclaration("const", [
|
|
151
|
+
t.variableDeclarator(
|
|
152
|
+
WrapperIdentifier,
|
|
153
|
+
t.callExpression(t.identifier("__internalWithTheme"), [
|
|
154
|
+
t.identifier(name),
|
|
155
|
+
t.arrowFunctionExpression(
|
|
156
|
+
[t.identifier("theme")],
|
|
157
|
+
t.blockStatement([t.returnStatement(stylesExpr)])
|
|
158
|
+
),
|
|
159
|
+
t.arrayExpression(
|
|
160
|
+
[...themeKeysUsed].map((k) => t.stringLiteral(k))
|
|
161
|
+
)
|
|
162
|
+
])
|
|
163
|
+
)
|
|
164
|
+
])
|
|
165
|
+
), props.node.name = WrapperIdentifier;
|
|
166
|
+
} else
|
|
167
|
+
props.node.attributes.push(
|
|
168
|
+
t.jsxAttribute(
|
|
169
|
+
t.jsxIdentifier("style"),
|
|
170
|
+
t.jsxExpressionContainer(
|
|
171
|
+
stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr
|
|
172
|
+
)
|
|
173
|
+
)
|
|
174
|
+
);
|
|
140
175
|
}
|
|
141
176
|
});
|
|
142
177
|
} catch (err) {
|
|
@@ -172,11 +207,12 @@ function assertValidTag(node) {
|
|
|
172
207
|
}
|
|
173
208
|
function splitThemeStyles(style) {
|
|
174
209
|
const themed = {}, plain = {};
|
|
210
|
+
let noTheme = !0;
|
|
175
211
|
for (const key in style) {
|
|
176
212
|
const val = style[key];
|
|
177
|
-
val && val[0] === "$" ? themed[key] = val : plain[key] = val;
|
|
213
|
+
val && val[0] === "$" ? (themed[key] = val, noTheme = !1) : plain[key] = val;
|
|
178
214
|
}
|
|
179
|
-
return { themed, plain };
|
|
215
|
+
return { themed: noTheme ? null : themed, plain };
|
|
180
216
|
}
|
|
181
217
|
export {
|
|
182
218
|
src_default as default
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,gBAAgB;AAEzB,OAAO,eAAe;AACtB,SAAS,eAAe;AACxB,OAAO,cAAc;AAErB,YAAY,OAAO;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/esm/index.native.js
CHANGED
|
@@ -3,18 +3,20 @@ import generator from "@babel/generator";
|
|
|
3
3
|
import { declare } from "@babel/helper-plugin-utils";
|
|
4
4
|
import template from "@babel/template";
|
|
5
5
|
import * as t from "@babel/types";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
createExtractor,
|
|
8
|
+
getPragmaOptions,
|
|
9
|
+
isSimpleSpread,
|
|
10
|
+
literalToAst
|
|
11
|
+
} from "@tamagui/static";
|
|
7
12
|
const importNativeView = template(`
|
|
8
13
|
const __ReactNativeView = require('react-native').View;
|
|
9
14
|
const __ReactNativeText = require('react-native').Text;
|
|
10
15
|
`), importStyleSheet = template(`
|
|
11
16
|
const __ReactNativeStyleSheet = require('react-native').StyleSheet;
|
|
12
|
-
`),
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
isSimpleSpread,
|
|
16
|
-
literalToAst
|
|
17
|
-
} = require("@tamagui/static"), extractor = createExtractor();
|
|
17
|
+
`), importWithTheme = template(`
|
|
18
|
+
const __internalWithTheme = require('@tamagui/core').internalWithTheme;
|
|
19
|
+
`), extractor = createExtractor();
|
|
18
20
|
var src_default = declare(function(api, options) {
|
|
19
21
|
return api.assertVersion(7), {
|
|
20
22
|
name: "tamagui",
|
|
@@ -23,7 +25,7 @@ var src_default = declare(function(api, options) {
|
|
|
23
25
|
enter(root) {
|
|
24
26
|
let sourcePath = this.file.opts.filename;
|
|
25
27
|
process.env.SOURCE_ROOT?.endsWith("ios") && (sourcePath = sourcePath.replace("/ios", ""));
|
|
26
|
-
let hasImportedView = !1;
|
|
28
|
+
let hasImportedView = !1, hasImportedViewWrapper = !1;
|
|
27
29
|
const sheetStyles = {}, sheetIdentifier = root.scope.generateUidIdentifier("sheet"), firstComment = root.node.body[0]?.leadingComments?.[0]?.value?.trim() ?? "", { shouldPrintDebug, shouldDisable } = getPragmaOptions({
|
|
28
30
|
disableCommentCheck: !0,
|
|
29
31
|
source: firstComment,
|
|
@@ -72,7 +74,7 @@ var src_default = declare(function(api, options) {
|
|
|
72
74
|
// for now just turn it off entirely at a small perf loss
|
|
73
75
|
disableExtractInlineMedia: !0,
|
|
74
76
|
// disable extracting variables as no native concept of them (only theme values)
|
|
75
|
-
disableExtractVariables: "theme",
|
|
77
|
+
disableExtractVariables: options.experimentalFlattenThemesOnNative ? !1 : "theme",
|
|
76
78
|
sourcePath,
|
|
77
79
|
// disabling flattening for now
|
|
78
80
|
// it's flattening a plain <Paragraph>hello</Paragraph> which breaks things because themes
|
|
@@ -83,42 +85,50 @@ var src_default = declare(function(api, options) {
|
|
|
83
85
|
return hasImportedView || (hasImportedView = !0, root.unshiftContainer("body", importNativeView())), isTextView ? "__ReactNativeText" : "__ReactNativeView";
|
|
84
86
|
},
|
|
85
87
|
onExtractTag(props) {
|
|
86
|
-
|
|
88
|
+
const { isFlattened } = props;
|
|
89
|
+
if (!isFlattened)
|
|
87
90
|
return;
|
|
88
91
|
assertValidTag(props.node);
|
|
89
|
-
const stylesExpr = t.arrayExpression([]), finalAttrs = [];
|
|
90
|
-
function
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
)
|
|
96
|
-
|
|
92
|
+
const stylesExpr = t.arrayExpression([]), finalAttrs = [], themeKeysUsed = /* @__PURE__ */ new Set();
|
|
93
|
+
function getStyleExpression(style) {
|
|
94
|
+
if (!style)
|
|
95
|
+
return;
|
|
96
|
+
const { plain, themed } = splitThemeStyles(style), ident = addSheetStyle(plain, props.node);
|
|
97
|
+
if (themed && options.experimentalFlattenThemesOnNative) {
|
|
98
|
+
for (const key in themed)
|
|
99
|
+
themeKeysUsed.add(key);
|
|
100
|
+
return t.arrayExpression([ident, addThemedStyleExpression(themed)]);
|
|
101
|
+
} else
|
|
102
|
+
return ident;
|
|
103
|
+
}
|
|
104
|
+
function addStyleExpression(expr) {
|
|
105
|
+
stylesExpr.elements.push(expr);
|
|
106
|
+
}
|
|
107
|
+
function addThemedStyleExpression(styles) {
|
|
108
|
+
const themedStylesAst = literalToAst(styles);
|
|
109
|
+
return themedStylesAst.properties.forEach((_) => {
|
|
110
|
+
const prop = _;
|
|
111
|
+
prop.value.type === "StringLiteral" && (prop.value = t.memberExpression(
|
|
112
|
+
t.identifier("theme"),
|
|
113
|
+
t.identifier(prop.value.value.slice(1))
|
|
114
|
+
));
|
|
115
|
+
}), themedStylesAst;
|
|
97
116
|
}
|
|
98
117
|
for (const attr of props.attrs)
|
|
99
118
|
switch (attr.type) {
|
|
100
119
|
case "style": {
|
|
101
|
-
|
|
102
|
-
for (const key in themed)
|
|
103
|
-
finalAttrs.push(
|
|
104
|
-
t.jsxAttribute(
|
|
105
|
-
t.jsxIdentifier(key),
|
|
106
|
-
t.stringLiteral(themed[key])
|
|
107
|
-
)
|
|
108
|
-
);
|
|
109
|
-
const ident = addSheetStyle(plain, props.node);
|
|
110
|
-
addStyle(ident, simpleHash(JSON.stringify(plain)));
|
|
120
|
+
addStyleExpression(getStyleExpression(attr.value));
|
|
111
121
|
break;
|
|
112
122
|
}
|
|
113
123
|
case "ternary": {
|
|
114
|
-
const { consequent, alternate } = attr.value,
|
|
124
|
+
const { consequent, alternate } = attr.value, consExpr = getStyleExpression(consequent), altExpr = getStyleExpression(alternate), styleExpr = t.conditionalExpression(
|
|
115
125
|
attr.value.test,
|
|
116
|
-
|
|
117
|
-
|
|
126
|
+
consExpr || t.nullLiteral(),
|
|
127
|
+
altExpr || t.nullLiteral()
|
|
118
128
|
);
|
|
119
|
-
|
|
120
|
-
styleExpr
|
|
121
|
-
simpleHash(JSON.stringify({ consequent, alternate }))
|
|
129
|
+
addStyleExpression(
|
|
130
|
+
styleExpr
|
|
131
|
+
// isFlattened ? simpleHash(JSON.stringify({ consequent, alternate })) : undefined
|
|
122
132
|
);
|
|
123
133
|
break;
|
|
124
134
|
}
|
|
@@ -129,14 +139,39 @@ var src_default = declare(function(api, options) {
|
|
|
129
139
|
break;
|
|
130
140
|
}
|
|
131
141
|
}
|
|
132
|
-
props.node.attributes = finalAttrs, props.isFlattened
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
if (props.node.attributes = finalAttrs, props.isFlattened)
|
|
143
|
+
if (themeKeysUsed.size) {
|
|
144
|
+
hasImportedViewWrapper || (root.unshiftContainer("body", importWithTheme()), hasImportedViewWrapper = !0);
|
|
145
|
+
const name = props.node.name.name, WrapperIdentifier = root.scope.generateUidIdentifier(
|
|
146
|
+
name + "Wrapper"
|
|
147
|
+
);
|
|
148
|
+
root.pushContainer(
|
|
149
|
+
"body",
|
|
150
|
+
t.variableDeclaration("const", [
|
|
151
|
+
t.variableDeclarator(
|
|
152
|
+
WrapperIdentifier,
|
|
153
|
+
t.callExpression(t.identifier("__internalWithTheme"), [
|
|
154
|
+
t.identifier(name),
|
|
155
|
+
t.arrowFunctionExpression(
|
|
156
|
+
[t.identifier("theme")],
|
|
157
|
+
t.blockStatement([t.returnStatement(stylesExpr)])
|
|
158
|
+
),
|
|
159
|
+
t.arrayExpression(
|
|
160
|
+
[...themeKeysUsed].map((k) => t.stringLiteral(k))
|
|
161
|
+
)
|
|
162
|
+
])
|
|
163
|
+
)
|
|
164
|
+
])
|
|
165
|
+
), props.node.name = WrapperIdentifier;
|
|
166
|
+
} else
|
|
167
|
+
props.node.attributes.push(
|
|
168
|
+
t.jsxAttribute(
|
|
169
|
+
t.jsxIdentifier("style"),
|
|
170
|
+
t.jsxExpressionContainer(
|
|
171
|
+
stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr
|
|
172
|
+
)
|
|
173
|
+
)
|
|
174
|
+
);
|
|
140
175
|
}
|
|
141
176
|
});
|
|
142
177
|
} catch (err) {
|
|
@@ -172,11 +207,12 @@ function assertValidTag(node) {
|
|
|
172
207
|
}
|
|
173
208
|
function splitThemeStyles(style) {
|
|
174
209
|
const themed = {}, plain = {};
|
|
210
|
+
let noTheme = !0;
|
|
175
211
|
for (const key in style) {
|
|
176
212
|
const val = style[key];
|
|
177
|
-
val && val[0] === "$" ? themed[key] = val : plain[key] = val;
|
|
213
|
+
val && val[0] === "$" ? (themed[key] = val, noTheme = !1) : plain[key] = val;
|
|
178
214
|
}
|
|
179
|
-
return { themed, plain };
|
|
215
|
+
return { themed: noTheme ? null : themed, plain };
|
|
180
216
|
}
|
|
181
217
|
export {
|
|
182
218
|
src_default as default
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,gBAAgB;AAEzB,OAAO,eAAe;AACtB,SAAS,eAAe;AACxB,OAAO,cAAc;AAErB,YAAY,OAAO;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/babel-plugin",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.75.0",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"types": "./types/index.d.ts",
|
|
6
6
|
"main": "dist/cjs",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"@babel/helper-plugin-utils": "^7.21.5",
|
|
28
28
|
"@babel/template": "^7.20.7",
|
|
29
29
|
"@babel/traverse": "^7.21.5",
|
|
30
|
-
"@tamagui/simple-hash": "1.
|
|
31
|
-
"@tamagui/static": "1.
|
|
30
|
+
"@tamagui/simple-hash": "1.75.0",
|
|
31
|
+
"@tamagui/static": "1.75.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@babel/types": "^7.21.5",
|
|
35
|
-
"@tamagui/build": "1.
|
|
35
|
+
"@tamagui/build": "1.75.0"
|
|
36
36
|
},
|
|
37
37
|
"gitHead": "a49cc7ea6b93ba384e77a4880ae48ac4a5635c14"
|
|
38
38
|
}
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,12 @@ import template from '@babel/template'
|
|
|
6
6
|
import { Visitor } from '@babel/traverse'
|
|
7
7
|
import * as t from '@babel/types'
|
|
8
8
|
import { simpleHash } from '@tamagui/simple-hash'
|
|
9
|
+
import {
|
|
10
|
+
createExtractor,
|
|
11
|
+
getPragmaOptions,
|
|
12
|
+
isSimpleSpread,
|
|
13
|
+
literalToAst,
|
|
14
|
+
} from '@tamagui/static'
|
|
9
15
|
import type { TamaguiOptions } from '@tamagui/static'
|
|
10
16
|
|
|
11
17
|
const importNativeView = template(`
|
|
@@ -17,12 +23,9 @@ const importStyleSheet = template(`
|
|
|
17
23
|
const __ReactNativeStyleSheet = require('react-native').StyleSheet;
|
|
18
24
|
`)
|
|
19
25
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
isSimpleSpread,
|
|
24
|
-
literalToAst,
|
|
25
|
-
} = require('@tamagui/static')
|
|
26
|
+
const importWithTheme = template(`
|
|
27
|
+
const __internalWithTheme = require('@tamagui/core').internalWithTheme;
|
|
28
|
+
`)
|
|
26
29
|
|
|
27
30
|
const extractor = createExtractor()
|
|
28
31
|
|
|
@@ -50,6 +53,7 @@ export default declare(function snackBabelPlugin(
|
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
let hasImportedView = false
|
|
56
|
+
let hasImportedViewWrapper = false
|
|
53
57
|
const sheetStyles = {}
|
|
54
58
|
const sheetIdentifier = root.scope.generateUidIdentifier('sheet')
|
|
55
59
|
const firstComment =
|
|
@@ -114,7 +118,9 @@ export default declare(function snackBabelPlugin(
|
|
|
114
118
|
// for now just turn it off entirely at a small perf loss
|
|
115
119
|
disableExtractInlineMedia: true,
|
|
116
120
|
// disable extracting variables as no native concept of them (only theme values)
|
|
117
|
-
disableExtractVariables:
|
|
121
|
+
disableExtractVariables: options.experimentalFlattenThemesOnNative
|
|
122
|
+
? false
|
|
123
|
+
: 'theme',
|
|
118
124
|
sourcePath,
|
|
119
125
|
|
|
120
126
|
// disabling flattening for now
|
|
@@ -132,56 +138,79 @@ export default declare(function snackBabelPlugin(
|
|
|
132
138
|
},
|
|
133
139
|
|
|
134
140
|
onExtractTag(props) {
|
|
135
|
-
|
|
141
|
+
const { isFlattened } = props
|
|
142
|
+
|
|
143
|
+
if (!isFlattened) {
|
|
144
|
+
// we aren't optimizing at all if not flattened anymore
|
|
136
145
|
return
|
|
137
146
|
}
|
|
147
|
+
|
|
138
148
|
assertValidTag(props.node)
|
|
139
149
|
const stylesExpr = t.arrayExpression([])
|
|
140
150
|
const finalAttrs: (t.JSXAttribute | t.JSXSpreadAttribute)[] = []
|
|
151
|
+
const themeKeysUsed = new Set<string>()
|
|
141
152
|
|
|
142
|
-
function
|
|
143
|
-
if (
|
|
144
|
-
|
|
153
|
+
function getStyleExpression(style: Object | null) {
|
|
154
|
+
if (!style) return
|
|
155
|
+
|
|
156
|
+
// split theme properties and leave them as props since RN has no concept of theme
|
|
157
|
+
const { plain, themed } = splitThemeStyles(style)
|
|
158
|
+
|
|
159
|
+
const ident = addSheetStyle(plain, props.node)
|
|
160
|
+
|
|
161
|
+
if (themed && options.experimentalFlattenThemesOnNative) {
|
|
162
|
+
for (const key in themed) {
|
|
163
|
+
themeKeysUsed.add(key)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// make a sub-array
|
|
167
|
+
return t.arrayExpression([ident, addThemedStyleExpression(themed)])
|
|
145
168
|
} else {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
)
|
|
151
|
-
)
|
|
169
|
+
// since we only do flattened disabling this path
|
|
170
|
+
return ident
|
|
171
|
+
// when we supported extracting non-flattened
|
|
172
|
+
// addStyleExpression(ident, isFlattened ? simpleHash(JSON.stringify(plain)) : undefined)
|
|
152
173
|
}
|
|
153
174
|
}
|
|
154
175
|
|
|
176
|
+
function addStyleExpression(expr: any) {
|
|
177
|
+
stylesExpr.elements.push(expr)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function addThemedStyleExpression(styles: Object) {
|
|
181
|
+
const themedStylesAst = literalToAst(styles) as t.ObjectExpression
|
|
182
|
+
themedStylesAst.properties.forEach((_) => {
|
|
183
|
+
const prop = _ as t.ObjectProperty
|
|
184
|
+
if (prop.value.type === 'StringLiteral') {
|
|
185
|
+
prop.value = t.memberExpression(
|
|
186
|
+
t.identifier('theme'),
|
|
187
|
+
t.identifier(prop.value.value.slice(1))
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
})
|
|
191
|
+
return themedStylesAst
|
|
192
|
+
}
|
|
193
|
+
|
|
155
194
|
for (const attr of props.attrs) {
|
|
156
195
|
switch (attr.type) {
|
|
157
196
|
case 'style': {
|
|
158
|
-
|
|
159
|
-
const { themed, plain } = splitThemeStyles(attr.value)
|
|
160
|
-
for (const key in themed) {
|
|
161
|
-
finalAttrs.push(
|
|
162
|
-
t.jsxAttribute(
|
|
163
|
-
t.jsxIdentifier(key),
|
|
164
|
-
t.stringLiteral(themed[key])
|
|
165
|
-
)
|
|
166
|
-
)
|
|
167
|
-
}
|
|
168
|
-
const ident = addSheetStyle(plain, props.node)
|
|
169
|
-
addStyle(ident, simpleHash(JSON.stringify(plain)))
|
|
197
|
+
addStyleExpression(getStyleExpression(attr.value))
|
|
170
198
|
break
|
|
171
199
|
}
|
|
172
200
|
case 'ternary': {
|
|
173
|
-
// TODO use splitThemeStyles
|
|
174
201
|
const { consequent, alternate } = attr.value
|
|
175
|
-
|
|
176
|
-
const
|
|
202
|
+
|
|
203
|
+
const consExpr = getStyleExpression(consequent)
|
|
204
|
+
const altExpr = getStyleExpression(alternate)
|
|
205
|
+
|
|
177
206
|
const styleExpr = t.conditionalExpression(
|
|
178
207
|
attr.value.test,
|
|
179
|
-
|
|
180
|
-
|
|
208
|
+
consExpr || t.nullLiteral(),
|
|
209
|
+
altExpr || t.nullLiteral()
|
|
181
210
|
)
|
|
182
|
-
|
|
183
|
-
styleExpr
|
|
184
|
-
simpleHash(JSON.stringify({ consequent, alternate }))
|
|
211
|
+
addStyleExpression(
|
|
212
|
+
styleExpr
|
|
213
|
+
// isFlattened ? simpleHash(JSON.stringify({ consequent, alternate })) : undefined
|
|
185
214
|
)
|
|
186
215
|
break
|
|
187
216
|
}
|
|
@@ -200,17 +229,52 @@ export default declare(function snackBabelPlugin(
|
|
|
200
229
|
}
|
|
201
230
|
|
|
202
231
|
props.node.attributes = finalAttrs
|
|
232
|
+
|
|
203
233
|
if (props.isFlattened) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
234
|
+
if (themeKeysUsed.size) {
|
|
235
|
+
if (!hasImportedViewWrapper) {
|
|
236
|
+
root.unshiftContainer('body', importWithTheme())
|
|
237
|
+
hasImportedViewWrapper = true
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const name = props.node.name['name']
|
|
241
|
+
const WrapperIdentifier = root.scope.generateUidIdentifier(
|
|
242
|
+
name + 'Wrapper'
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
root.pushContainer(
|
|
246
|
+
'body',
|
|
247
|
+
t.variableDeclaration('const', [
|
|
248
|
+
t.variableDeclarator(
|
|
249
|
+
WrapperIdentifier,
|
|
250
|
+
t.callExpression(t.identifier('__internalWithTheme'), [
|
|
251
|
+
t.identifier(name),
|
|
252
|
+
t.arrowFunctionExpression(
|
|
253
|
+
[t.identifier('theme')],
|
|
254
|
+
t.blockStatement([t.returnStatement(stylesExpr)])
|
|
255
|
+
),
|
|
256
|
+
t.arrayExpression(
|
|
257
|
+
[...themeKeysUsed].map((k) => t.stringLiteral(k))
|
|
258
|
+
),
|
|
259
|
+
])
|
|
260
|
+
),
|
|
261
|
+
])
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
// @ts-ignore
|
|
265
|
+
props.node.name = WrapperIdentifier
|
|
266
|
+
} else {
|
|
267
|
+
props.node.attributes.push(
|
|
268
|
+
t.jsxAttribute(
|
|
269
|
+
t.jsxIdentifier('style'),
|
|
270
|
+
t.jsxExpressionContainer(
|
|
271
|
+
stylesExpr.elements.length === 1
|
|
272
|
+
? (stylesExpr.elements[0] as any)
|
|
273
|
+
: stylesExpr
|
|
274
|
+
)
|
|
211
275
|
)
|
|
212
276
|
)
|
|
213
|
-
|
|
277
|
+
}
|
|
214
278
|
}
|
|
215
279
|
},
|
|
216
280
|
})
|
|
@@ -272,15 +336,17 @@ function assertValidTag(node: t.JSXOpeningElement) {
|
|
|
272
336
|
}
|
|
273
337
|
|
|
274
338
|
function splitThemeStyles(style: Object) {
|
|
275
|
-
const themed = {}
|
|
276
|
-
const plain = {}
|
|
339
|
+
const themed: Object = {}
|
|
340
|
+
const plain: Object = {}
|
|
341
|
+
let noTheme = true
|
|
277
342
|
for (const key in style) {
|
|
278
343
|
const val = style[key]
|
|
279
344
|
if (val && val[0] === '$') {
|
|
280
345
|
themed[key] = val
|
|
346
|
+
noTheme = false
|
|
281
347
|
} else {
|
|
282
348
|
plain[key] = val
|
|
283
349
|
}
|
|
284
350
|
}
|
|
285
|
-
return { themed, plain }
|
|
351
|
+
return { themed: noTheme ? null : themed, plain }
|
|
286
352
|
}
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA+BA,wBAsSE"}
|