@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 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")), import_simple_hash = require("@tamagui/simple-hash");
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
- createExtractor,
36
- getPragmaOptions,
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
- if (!props.isFlattened)
106
+ const { isFlattened } = props;
107
+ if (!isFlattened)
110
108
  return;
111
109
  assertValidTag(props.node);
112
- const stylesExpr = t.arrayExpression([]), finalAttrs = [];
113
- function addStyle(expr, key) {
114
- props.isFlattened ? stylesExpr.elements.push(expr) : finalAttrs.push(
115
- t.jsxAttribute(
116
- t.jsxIdentifier(`_style${key}`),
117
- t.jsxExpressionContainer(expr)
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
- const { themed, plain } = splitThemeStyles(attr.value);
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, cons = addSheetStyle(consequent, props.node), alt = addSheetStyle(alternate, props.node), styleExpr = t.conditionalExpression(
142
+ const { consequent, alternate } = attr.value, consExpr = getStyleExpression(consequent), altExpr = getStyleExpression(alternate), styleExpr = t.conditionalExpression(
138
143
  attr.value.test,
139
- cons,
140
- alt
144
+ consExpr || t.nullLiteral(),
145
+ altExpr || t.nullLiteral()
141
146
  );
142
- addStyle(
143
- styleExpr,
144
- (0, import_simple_hash.simpleHash)(JSON.stringify({ consequent, alternate }))
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 && props.node.attributes.push(
156
- t.jsxAttribute(
157
- t.jsxIdentifier("style"),
158
- t.jsxExpressionContainer(
159
- stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "mappings": "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",
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
  }
@@ -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")), import_simple_hash = require("@tamagui/simple-hash");
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
- createExtractor,
37
- getPragmaOptions,
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
- if (!props.isFlattened)
107
+ const { isFlattened } = props;
108
+ if (!isFlattened)
111
109
  return;
112
110
  assertValidTag(props.node);
113
- const stylesExpr = t.arrayExpression([]), finalAttrs = [];
114
- function addStyle(expr, key) {
115
- props.isFlattened ? stylesExpr.elements.push(expr) : finalAttrs.push(
116
- t.jsxAttribute(
117
- t.jsxIdentifier(`_style${key}`),
118
- t.jsxExpressionContainer(expr)
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
- const { themed, plain } = splitThemeStyles(attr.value);
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, cons = addSheetStyle(consequent, props.node), alt = addSheetStyle(alternate, props.node), styleExpr = t.conditionalExpression(
143
+ const { consequent, alternate } = attr.value, consExpr = getStyleExpression(consequent), altExpr = getStyleExpression(alternate), styleExpr = t.conditionalExpression(
139
144
  attr.value.test,
140
- cons,
141
- alt
145
+ consExpr || t.nullLiteral(),
146
+ altExpr || t.nullLiteral()
142
147
  );
143
- addStyle(
144
- styleExpr,
145
- (0, import_simple_hash.simpleHash)(JSON.stringify({ consequent, alternate }))
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 && props.node.attributes.push(
157
- t.jsxAttribute(
158
- t.jsxIdentifier("style"),
159
- t.jsxExpressionContainer(
160
- stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr
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": "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",
4
+ "mappings": "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",
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 { simpleHash } from "@tamagui/simple-hash";
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
- createExtractor,
14
- getPragmaOptions,
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
- if (!props.isFlattened)
88
+ const { isFlattened } = props;
89
+ if (!isFlattened)
87
90
  return;
88
91
  assertValidTag(props.node);
89
- const stylesExpr = t.arrayExpression([]), finalAttrs = [];
90
- function addStyle(expr, key) {
91
- props.isFlattened ? stylesExpr.elements.push(expr) : finalAttrs.push(
92
- t.jsxAttribute(
93
- t.jsxIdentifier(`_style${key}`),
94
- t.jsxExpressionContainer(expr)
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
- const { themed, plain } = splitThemeStyles(attr.value);
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, cons = addSheetStyle(consequent, props.node), alt = addSheetStyle(alternate, props.node), styleExpr = t.conditionalExpression(
124
+ const { consequent, alternate } = attr.value, consExpr = getStyleExpression(consequent), altExpr = getStyleExpression(alternate), styleExpr = t.conditionalExpression(
115
125
  attr.value.test,
116
- cons,
117
- alt
126
+ consExpr || t.nullLiteral(),
127
+ altExpr || t.nullLiteral()
118
128
  );
119
- addStyle(
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 && props.node.attributes.push(
133
- t.jsxAttribute(
134
- t.jsxIdentifier("style"),
135
- t.jsxExpressionContainer(
136
- stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr
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": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -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 { simpleHash } from "@tamagui/simple-hash";
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
- createExtractor,
14
- getPragmaOptions,
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
- if (!props.isFlattened)
88
+ const { isFlattened } = props;
89
+ if (!isFlattened)
87
90
  return;
88
91
  assertValidTag(props.node);
89
- const stylesExpr = t.arrayExpression([]), finalAttrs = [];
90
- function addStyle(expr, key) {
91
- props.isFlattened ? stylesExpr.elements.push(expr) : finalAttrs.push(
92
- t.jsxAttribute(
93
- t.jsxIdentifier(`_style${key}`),
94
- t.jsxExpressionContainer(expr)
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
- const { themed, plain } = splitThemeStyles(attr.value);
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, cons = addSheetStyle(consequent, props.node), alt = addSheetStyle(alternate, props.node), styleExpr = t.conditionalExpression(
124
+ const { consequent, alternate } = attr.value, consExpr = getStyleExpression(consequent), altExpr = getStyleExpression(alternate), styleExpr = t.conditionalExpression(
115
125
  attr.value.test,
116
- cons,
117
- alt
126
+ consExpr || t.nullLiteral(),
127
+ altExpr || t.nullLiteral()
118
128
  );
119
- addStyle(
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 && props.node.attributes.push(
133
- t.jsxAttribute(
134
- t.jsxIdentifier("style"),
135
- t.jsxExpressionContainer(
136
- stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr
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": "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",
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.74.21",
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.74.21",
31
- "@tamagui/static": "1.74.21"
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.74.21"
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
- createExtractor,
22
- getPragmaOptions,
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: 'theme',
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
- if (!props.isFlattened) {
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 addStyle(expr: any, key: string) {
143
- if (props.isFlattened) {
144
- stylesExpr.elements.push(expr)
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
- finalAttrs.push(
147
- t.jsxAttribute(
148
- t.jsxIdentifier(`_style${key}`),
149
- t.jsxExpressionContainer(expr)
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
- // split theme properties and leave them as props since RN has no concept of theme
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
- const cons = addSheetStyle(consequent, props.node)
176
- const alt = addSheetStyle(alternate, props.node)
202
+
203
+ const consExpr = getStyleExpression(consequent)
204
+ const altExpr = getStyleExpression(alternate)
205
+
177
206
  const styleExpr = t.conditionalExpression(
178
207
  attr.value.test,
179
- cons,
180
- alt
208
+ consExpr || t.nullLiteral(),
209
+ altExpr || t.nullLiteral()
181
210
  )
182
- addStyle(
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
- props.node.attributes.push(
205
- t.jsxAttribute(
206
- t.jsxIdentifier('style'),
207
- t.jsxExpressionContainer(
208
- stylesExpr.elements.length === 1
209
- ? (stylesExpr.elements[0] as any)
210
- : stylesExpr
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA4BA,wBAyOE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA+BA,wBAsSE"}