@tamagui/static 1.14.1 → 1.14.3

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.
Files changed (195) hide show
  1. package/dist/cjs/constants.js +52 -1
  2. package/dist/cjs/constants.js.map +2 -2
  3. package/dist/cjs/extractor/accessSafe.js +52 -1
  4. package/dist/cjs/extractor/accessSafe.js.map +2 -2
  5. package/dist/cjs/extractor/babelParse.js +66 -1
  6. package/dist/cjs/extractor/babelParse.js.map +2 -2
  7. package/dist/cjs/extractor/buildClassName.js +99 -1
  8. package/dist/cjs/extractor/buildClassName.js.map +2 -2
  9. package/dist/cjs/extractor/bundle.js +126 -1
  10. package/dist/cjs/extractor/bundle.js.map +2 -2
  11. package/dist/cjs/extractor/createEvaluator.js +86 -1
  12. package/dist/cjs/extractor/createEvaluator.js.map +2 -2
  13. package/dist/cjs/extractor/createExtractor.js +1630 -15
  14. package/dist/cjs/extractor/createExtractor.js.map +2 -2
  15. package/dist/cjs/extractor/ensureImportingConcat.js +64 -1
  16. package/dist/cjs/extractor/ensureImportingConcat.js.map +2 -2
  17. package/dist/cjs/extractor/evaluateAstNode.js +130 -1
  18. package/dist/cjs/extractor/evaluateAstNode.js.map +2 -2
  19. package/dist/cjs/extractor/extractHelpers.js +207 -1
  20. package/dist/cjs/extractor/extractHelpers.js.map +2 -2
  21. package/dist/cjs/extractor/extractMediaStyle.js +193 -1
  22. package/dist/cjs/extractor/extractMediaStyle.js.map +2 -2
  23. package/dist/cjs/extractor/extractToClassNames.js +413 -13
  24. package/dist/cjs/extractor/extractToClassNames.js.map +2 -2
  25. package/dist/cjs/extractor/findTopmostFunction.js +43 -1
  26. package/dist/cjs/extractor/findTopmostFunction.js.map +2 -2
  27. package/dist/cjs/extractor/generatedUid.js +59 -1
  28. package/dist/cjs/extractor/generatedUid.js.map +2 -2
  29. package/dist/cjs/extractor/getPrefixLogs.js +31 -1
  30. package/dist/cjs/extractor/getPrefixLogs.js.map +2 -2
  31. package/dist/cjs/extractor/getPropValueFromAttributes.js +89 -1
  32. package/dist/cjs/extractor/getPropValueFromAttributes.js.map +2 -2
  33. package/dist/cjs/extractor/getSourceModule.js +103 -1
  34. package/dist/cjs/extractor/getSourceModule.js.map +2 -2
  35. package/dist/cjs/extractor/getStaticBindingsForScope.js +225 -1
  36. package/dist/cjs/extractor/getStaticBindingsForScope.js.map +2 -2
  37. package/dist/cjs/extractor/hoistClassNames.js +74 -1
  38. package/dist/cjs/extractor/hoistClassNames.js.map +2 -2
  39. package/dist/cjs/extractor/literalToAst.js +115 -1
  40. package/dist/cjs/extractor/literalToAst.js.map +2 -2
  41. package/dist/cjs/extractor/loadFile.js +20 -2
  42. package/dist/cjs/extractor/loadFile.js.map +2 -2
  43. package/dist/cjs/extractor/loadTamagui.js +432 -15
  44. package/dist/cjs/extractor/loadTamagui.js.map +2 -2
  45. package/dist/cjs/extractor/logLines.js +43 -3
  46. package/dist/cjs/extractor/logLines.js.map +2 -2
  47. package/dist/cjs/extractor/normalizeTernaries.js +85 -1
  48. package/dist/cjs/extractor/normalizeTernaries.js.map +2 -2
  49. package/dist/cjs/extractor/removeUnusedHooks.js +109 -1
  50. package/dist/cjs/extractor/removeUnusedHooks.js.map +2 -2
  51. package/dist/cjs/extractor/timer.js +52 -1
  52. package/dist/cjs/extractor/timer.js.map +2 -2
  53. package/dist/cjs/extractor/validHTMLAttributes.js +126 -1
  54. package/dist/cjs/extractor/validHTMLAttributes.js.map +2 -2
  55. package/dist/cjs/getPragmaOptions.js +67 -2
  56. package/dist/cjs/getPragmaOptions.js.map +2 -2
  57. package/dist/cjs/helpers/memoize.js +45 -1
  58. package/dist/cjs/helpers/memoize.js.map +2 -2
  59. package/dist/cjs/index.js +42 -1
  60. package/dist/cjs/index.js.map +2 -2
  61. package/dist/cjs/require.js +81 -5
  62. package/dist/cjs/require.js.map +2 -2
  63. package/dist/cjs/types.js +16 -1
  64. package/dist/cjs/types.js.map +2 -2
  65. package/dist/cjs/webpackPlugin.js +34 -1
  66. package/dist/cjs/webpackPlugin.js.map +2 -2
  67. package/dist/esm/constants.js +14 -1
  68. package/dist/esm/constants.js.map +2 -2
  69. package/dist/esm/constants.mjs +14 -1
  70. package/dist/esm/constants.mjs.map +2 -2
  71. package/dist/esm/extractor/accessSafe.js +18 -1
  72. package/dist/esm/extractor/accessSafe.js.map +2 -2
  73. package/dist/esm/extractor/accessSafe.mjs +18 -1
  74. package/dist/esm/extractor/accessSafe.mjs.map +2 -2
  75. package/dist/esm/extractor/babelParse.js +31 -1
  76. package/dist/esm/extractor/babelParse.js.map +2 -2
  77. package/dist/esm/extractor/babelParse.mjs +31 -1
  78. package/dist/esm/extractor/babelParse.mjs.map +2 -2
  79. package/dist/esm/extractor/buildClassName.js +64 -1
  80. package/dist/esm/extractor/buildClassName.js.map +2 -2
  81. package/dist/esm/extractor/buildClassName.mjs +64 -1
  82. package/dist/esm/extractor/buildClassName.mjs.map +2 -2
  83. package/dist/esm/extractor/bundle.js +91 -1
  84. package/dist/esm/extractor/bundle.js.map +2 -2
  85. package/dist/esm/extractor/bundle.mjs +91 -1
  86. package/dist/esm/extractor/bundle.mjs.map +2 -2
  87. package/dist/esm/extractor/createEvaluator.js +51 -1
  88. package/dist/esm/extractor/createEvaluator.js.map +2 -2
  89. package/dist/esm/extractor/createEvaluator.mjs +51 -1
  90. package/dist/esm/extractor/createEvaluator.mjs.map +2 -2
  91. package/dist/esm/extractor/createExtractor.js +1613 -15
  92. package/dist/esm/extractor/createExtractor.js.map +2 -2
  93. package/dist/esm/extractor/createExtractor.mjs +1613 -15
  94. package/dist/esm/extractor/createExtractor.mjs.map +2 -2
  95. package/dist/esm/extractor/ensureImportingConcat.js +30 -1
  96. package/dist/esm/extractor/ensureImportingConcat.js.map +2 -2
  97. package/dist/esm/extractor/ensureImportingConcat.mjs +30 -1
  98. package/dist/esm/extractor/ensureImportingConcat.mjs.map +2 -2
  99. package/dist/esm/extractor/evaluateAstNode.js +96 -1
  100. package/dist/esm/extractor/evaluateAstNode.js.map +2 -2
  101. package/dist/esm/extractor/evaluateAstNode.mjs +96 -1
  102. package/dist/esm/extractor/evaluateAstNode.mjs.map +2 -2
  103. package/dist/esm/extractor/extractHelpers.js +161 -1
  104. package/dist/esm/extractor/extractHelpers.js.map +2 -2
  105. package/dist/esm/extractor/extractHelpers.mjs +161 -1
  106. package/dist/esm/extractor/extractHelpers.mjs.map +2 -2
  107. package/dist/esm/extractor/extractMediaStyle.js +158 -1
  108. package/dist/esm/extractor/extractMediaStyle.js.map +2 -2
  109. package/dist/esm/extractor/extractMediaStyle.mjs +158 -1
  110. package/dist/esm/extractor/extractMediaStyle.mjs.map +2 -2
  111. package/dist/esm/extractor/extractToClassNames.js +379 -13
  112. package/dist/esm/extractor/extractToClassNames.js.map +2 -2
  113. package/dist/esm/extractor/extractToClassNames.mjs +379 -13
  114. package/dist/esm/extractor/extractToClassNames.mjs.map +2 -2
  115. package/dist/esm/extractor/findTopmostFunction.js +19 -1
  116. package/dist/esm/extractor/findTopmostFunction.js.map +2 -2
  117. package/dist/esm/extractor/findTopmostFunction.mjs +19 -1
  118. package/dist/esm/extractor/findTopmostFunction.mjs.map +2 -2
  119. package/dist/esm/extractor/generatedUid.js +25 -1
  120. package/dist/esm/extractor/generatedUid.js.map +2 -2
  121. package/dist/esm/extractor/generatedUid.mjs +25 -1
  122. package/dist/esm/extractor/generatedUid.mjs.map +2 -2
  123. package/dist/esm/extractor/getPrefixLogs.js +7 -1
  124. package/dist/esm/extractor/getPrefixLogs.js.map +2 -2
  125. package/dist/esm/extractor/getPrefixLogs.mjs +7 -1
  126. package/dist/esm/extractor/getPrefixLogs.mjs.map +2 -2
  127. package/dist/esm/extractor/getPropValueFromAttributes.js +55 -1
  128. package/dist/esm/extractor/getPropValueFromAttributes.js.map +2 -2
  129. package/dist/esm/extractor/getPropValueFromAttributes.mjs +55 -1
  130. package/dist/esm/extractor/getPropValueFromAttributes.mjs.map +2 -2
  131. package/dist/esm/extractor/getSourceModule.js +69 -1
  132. package/dist/esm/extractor/getSourceModule.js.map +2 -2
  133. package/dist/esm/extractor/getSourceModule.mjs +69 -1
  134. package/dist/esm/extractor/getSourceModule.mjs.map +2 -2
  135. package/dist/esm/extractor/getStaticBindingsForScope.js +190 -1
  136. package/dist/esm/extractor/getStaticBindingsForScope.js.map +2 -2
  137. package/dist/esm/extractor/getStaticBindingsForScope.mjs +190 -1
  138. package/dist/esm/extractor/getStaticBindingsForScope.mjs.map +2 -2
  139. package/dist/esm/extractor/hoistClassNames.js +40 -1
  140. package/dist/esm/extractor/hoistClassNames.js.map +2 -2
  141. package/dist/esm/extractor/hoistClassNames.mjs +40 -1
  142. package/dist/esm/extractor/hoistClassNames.mjs.map +2 -2
  143. package/dist/esm/extractor/literalToAst.js +80 -1
  144. package/dist/esm/extractor/literalToAst.js.map +2 -2
  145. package/dist/esm/extractor/literalToAst.mjs +80 -1
  146. package/dist/esm/extractor/literalToAst.mjs.map +2 -2
  147. package/dist/esm/extractor/loadFile.js +19 -2
  148. package/dist/esm/extractor/loadFile.js.map +2 -2
  149. package/dist/esm/extractor/loadFile.mjs +19 -2
  150. package/dist/esm/extractor/loadFile.mjs.map +2 -2
  151. package/dist/esm/extractor/loadTamagui.js +396 -15
  152. package/dist/esm/extractor/loadTamagui.js.map +2 -2
  153. package/dist/esm/extractor/loadTamagui.mjs +396 -15
  154. package/dist/esm/extractor/loadTamagui.mjs.map +2 -2
  155. package/dist/esm/extractor/logLines.js +19 -3
  156. package/dist/esm/extractor/logLines.js.map +2 -2
  157. package/dist/esm/extractor/logLines.mjs +19 -3
  158. package/dist/esm/extractor/logLines.mjs.map +2 -2
  159. package/dist/esm/extractor/normalizeTernaries.js +51 -1
  160. package/dist/esm/extractor/normalizeTernaries.js.map +2 -2
  161. package/dist/esm/extractor/normalizeTernaries.mjs +51 -1
  162. package/dist/esm/extractor/normalizeTernaries.mjs.map +2 -2
  163. package/dist/esm/extractor/removeUnusedHooks.js +75 -1
  164. package/dist/esm/extractor/removeUnusedHooks.js.map +2 -2
  165. package/dist/esm/extractor/removeUnusedHooks.mjs +75 -1
  166. package/dist/esm/extractor/removeUnusedHooks.mjs.map +2 -2
  167. package/dist/esm/extractor/timer.js +28 -1
  168. package/dist/esm/extractor/timer.js.map +2 -2
  169. package/dist/esm/extractor/timer.mjs +28 -1
  170. package/dist/esm/extractor/timer.mjs.map +2 -2
  171. package/dist/esm/extractor/validHTMLAttributes.js +101 -1
  172. package/dist/esm/extractor/validHTMLAttributes.js.map +2 -2
  173. package/dist/esm/extractor/validHTMLAttributes.mjs +101 -1
  174. package/dist/esm/extractor/validHTMLAttributes.mjs.map +2 -2
  175. package/dist/esm/getPragmaOptions.js +43 -2
  176. package/dist/esm/getPragmaOptions.js.map +2 -2
  177. package/dist/esm/getPragmaOptions.mjs +43 -2
  178. package/dist/esm/getPragmaOptions.mjs.map +2 -2
  179. package/dist/esm/helpers/memoize.js +21 -1
  180. package/dist/esm/helpers/memoize.js.map +2 -2
  181. package/dist/esm/helpers/memoize.mjs +21 -1
  182. package/dist/esm/helpers/memoize.mjs.map +2 -2
  183. package/dist/esm/index.js +15 -1
  184. package/dist/esm/index.js.map +2 -2
  185. package/dist/esm/index.mjs +15 -1
  186. package/dist/esm/index.mjs.map +2 -2
  187. package/dist/esm/require.js +55 -5
  188. package/dist/esm/require.js.map +2 -2
  189. package/dist/esm/require.mjs +55 -5
  190. package/dist/esm/require.mjs.map +2 -2
  191. package/dist/esm/webpackPlugin.js +10 -1
  192. package/dist/esm/webpackPlugin.js.map +2 -2
  193. package/dist/esm/webpackPlugin.mjs +10 -1
  194. package/dist/esm/webpackPlugin.mjs.map +2 -2
  195. package/package.json +14 -14
@@ -1,2 +1,191 @@
1
- import{fork as W}from"child_process";import{dirname as $,extname as k,join as B,resolve as b}from"path";import*as m from"@babel/types";import{evaluateAstNode as x}from"./evaluateAstNode.js";import{getSourceModule as N}from"./getSourceModule.js";const h=i=>i.startsWith(".")||i.startsWith("/");function w(i,t){const d=$(i);return h(t)?(k(t)===""&&(t+=".js"),b(d,t)):t}const y=new Map,I=new Map,j=`${B(__dirname,"loadFile.js")}`;let E=!1,r=null;function R(){r=W(j,[],{execArgv:["-r","esbuild-register"],detached:!1,stdio:"ignore"})}function M(){E||r&&(r.removeAllListeners(),r.unref(),r.disconnect(),r.kill(),E=!0)}process.once("SIGTERM",M),process.once("SIGINT",M),process.once("beforeExit",M);function O(i){if(r||R(),I.has(i))return I.get(i);const t=new Promise((d,a)=>{if(!r)return;if(y.size>2e3&&y.clear(),y.has(i))return y.get(i);const u=f=>{if(!r||!f||typeof f!="string")return;if(f[0]==="-"){a(new Error(f.slice(1)));return}r.removeListener("message",u);const o=JSON.parse(f);y.set(i,o),d(o)};r.once("message",u),r.send(`${i.replace(".js","")}`)});return I.set(i,t),t}async function q(i,t=[],d,a,u){var P;const f=i.getAllBindings(),o={},S=i.getProgramParent().block;for(const n of S.body)if(m.isImportDeclaration(n)){const p=n.source.value;if(!n.specifiers.length||!h(p))continue;const s=w(d,p);if(!t.some(e=>s.endsWith(e)))continue;try{const e=await O(s);if(!e)continue;for(const c of n.specifiers)if(m.isImportSpecifier(c)&&m.isIdentifier(c.imported)&&typeof e[c.imported.name]<"u"){const l=e[c.local.name];o[c.local.name]=l}}catch(e){u?console.warn(` | Skipping partial evaluation of constant file: ${s} (DEBUG=tamagui for more)`):(P=process.env.DEBUG)!=null&&P.startsWith("tamagui")&&console.log("Error in partial evaluation",e.message,e.stack)}}if(!a)throw new Error("BindingCache is a required param");for(const n in f){const p=f[n],s=N(n,p);if(s){if(!s.sourceModule)continue;const l=w(d,s.sourceModule);if(t.some(g=>l.endsWith(g))){const g=O(l);if(!g)return console.log(` | \u26A0\uFE0F Missing file ${l} via ${d} import ${s.sourceModule}?`),{};s.destructured?s.imported&&(o[n]=g[s.imported]):o[n]=g}continue}const{parent:v}=p.path;if(!m.isVariableDeclaration(v)||v.kind!=="const")continue;const e=v.declarations.find(l=>m.isIdentifier(l.id)&&l.id.name===n);if(!e||!e.init)continue;if(typeof e.id.start!="number"||typeof e.id.end!="number"){console.error("dec.id.start/end is not a number");continue}if(!m.isIdentifier(e.id)){console.error("dec is not an identifier");continue}const c=`${e.id.name}_${e.id.start}-${e.id.end}`;if(Object.hasOwnProperty.call(a,c)){o[n]=a[c];continue}if(Object.hasOwnProperty.call(a,c)){o[n]=a[c];continue}try{o[n]=x(e.init,void 0,u),a[c]=o[n];continue}catch{}}return o}export{M as cleanupBeforeExit,q as getStaticBindingsForScope};
1
+ import { fork } from "child_process";
2
+ import { dirname, extname, join, resolve } from "path";
3
+ import * as t from "@babel/types";
4
+ import { evaluateAstNode } from "./evaluateAstNode.js";
5
+ import { getSourceModule } from "./getSourceModule.js";
6
+ const isLocalImport = (path) => path.startsWith(".") || path.startsWith("/");
7
+ function resolveImportPath(sourcePath, path) {
8
+ const sourceDir = dirname(sourcePath);
9
+ if (isLocalImport(path)) {
10
+ if (extname(path) === "") {
11
+ path += ".js";
12
+ }
13
+ return resolve(sourceDir, path);
14
+ }
15
+ return path;
16
+ }
17
+ const cache = /* @__PURE__ */ new Map();
18
+ const pending = /* @__PURE__ */ new Map();
19
+ const loadCmd = `${join(__dirname, "loadFile.js")}`;
20
+ let exited = false;
21
+ let child = null;
22
+ function forkChild() {
23
+ child = fork(loadCmd, [], {
24
+ execArgv: ["-r", "esbuild-register"],
25
+ detached: false,
26
+ stdio: "ignore"
27
+ });
28
+ }
29
+ function cleanupBeforeExit() {
30
+ if (exited)
31
+ return;
32
+ if (!child)
33
+ return;
34
+ child.removeAllListeners();
35
+ child.unref();
36
+ child.disconnect();
37
+ child.kill();
38
+ exited = true;
39
+ }
40
+ process.once("SIGTERM", cleanupBeforeExit);
41
+ process.once("SIGINT", cleanupBeforeExit);
42
+ process.once("beforeExit", cleanupBeforeExit);
43
+ function importModule(path) {
44
+ if (!child) {
45
+ forkChild();
46
+ }
47
+ if (pending.has(path)) {
48
+ return pending.get(path);
49
+ }
50
+ const promise = new Promise((res, rej) => {
51
+ if (!child)
52
+ return;
53
+ if (cache.size > 2e3) {
54
+ cache.clear();
55
+ }
56
+ if (cache.has(path)) {
57
+ return cache.get(path);
58
+ }
59
+ const listener = (msg) => {
60
+ if (!child)
61
+ return;
62
+ if (!msg)
63
+ return;
64
+ if (typeof msg !== "string")
65
+ return;
66
+ if (msg[0] === "-") {
67
+ rej(new Error(msg.slice(1)));
68
+ return;
69
+ }
70
+ child.removeListener("message", listener);
71
+ const val = JSON.parse(msg);
72
+ cache.set(path, val);
73
+ res(val);
74
+ };
75
+ child.once("message", listener);
76
+ child.send(`${path.replace(".js", "")}`);
77
+ });
78
+ pending.set(path, promise);
79
+ return promise;
80
+ }
81
+ async function getStaticBindingsForScope(scope, whitelist = [], sourcePath, bindingCache, shouldPrintDebug) {
82
+ var _a;
83
+ const bindings = scope.getAllBindings();
84
+ const ret = {};
85
+ if (shouldPrintDebug) {
86
+ }
87
+ const program = scope.getProgramParent().block;
88
+ for (const node of program.body) {
89
+ if (t.isImportDeclaration(node)) {
90
+ const importPath = node.source.value;
91
+ if (!node.specifiers.length)
92
+ continue;
93
+ if (!isLocalImport(importPath)) {
94
+ continue;
95
+ }
96
+ const moduleName = resolveImportPath(sourcePath, importPath);
97
+ const isOnWhitelist = whitelist.some((test) => moduleName.endsWith(test));
98
+ if (!isOnWhitelist)
99
+ continue;
100
+ try {
101
+ const src = await importModule(moduleName);
102
+ if (!src)
103
+ continue;
104
+ for (const specifier of node.specifiers) {
105
+ if (t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported)) {
106
+ if (typeof src[specifier.imported.name] !== "undefined") {
107
+ const val = src[specifier.local.name];
108
+ ret[specifier.local.name] = val;
109
+ }
110
+ }
111
+ }
112
+ } catch (err) {
113
+ if (shouldPrintDebug) {
114
+ console.warn(
115
+ ` | Skipping partial evaluation of constant file: ${moduleName} (DEBUG=tamagui for more)`
116
+ );
117
+ } else if ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui")) {
118
+ console.log(`Error in partial evaluation`, err.message, err.stack);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ if (!bindingCache) {
124
+ throw new Error("BindingCache is a required param");
125
+ }
126
+ for (const k in bindings) {
127
+ const binding = bindings[k];
128
+ const sourceModule = getSourceModule(k, binding);
129
+ if (sourceModule) {
130
+ if (!sourceModule.sourceModule) {
131
+ continue;
132
+ }
133
+ const moduleName = resolveImportPath(sourcePath, sourceModule.sourceModule);
134
+ const isOnWhitelist = whitelist.some((test) => moduleName.endsWith(test));
135
+ if (isOnWhitelist) {
136
+ const src = importModule(moduleName);
137
+ if (!src) {
138
+ console.log(
139
+ ` | \u26A0\uFE0F Missing file ${moduleName} via ${sourcePath} import ${sourceModule.sourceModule}?`
140
+ );
141
+ return {};
142
+ }
143
+ if (sourceModule.destructured) {
144
+ if (sourceModule.imported) {
145
+ ret[k] = src[sourceModule.imported];
146
+ }
147
+ } else {
148
+ ret[k] = src;
149
+ }
150
+ }
151
+ continue;
152
+ }
153
+ const { parent } = binding.path;
154
+ if (!t.isVariableDeclaration(parent) || parent.kind !== "const") {
155
+ continue;
156
+ }
157
+ const dec = parent.declarations.find((d) => t.isIdentifier(d.id) && d.id.name === k);
158
+ if (!dec || !dec.init) {
159
+ continue;
160
+ }
161
+ if (typeof dec.id.start !== "number" || typeof dec.id.end !== "number") {
162
+ console.error("dec.id.start/end is not a number");
163
+ continue;
164
+ }
165
+ if (!t.isIdentifier(dec.id)) {
166
+ console.error("dec is not an identifier");
167
+ continue;
168
+ }
169
+ const cacheKey = `${dec.id.name}_${dec.id.start}-${dec.id.end}`;
170
+ if (Object.hasOwnProperty.call(bindingCache, cacheKey)) {
171
+ ret[k] = bindingCache[cacheKey];
172
+ continue;
173
+ }
174
+ if (Object.hasOwnProperty.call(bindingCache, cacheKey)) {
175
+ ret[k] = bindingCache[cacheKey];
176
+ continue;
177
+ }
178
+ try {
179
+ ret[k] = evaluateAstNode(dec.init, void 0, shouldPrintDebug);
180
+ bindingCache[cacheKey] = ret[k];
181
+ continue;
182
+ } catch {
183
+ }
184
+ }
185
+ return ret;
186
+ }
187
+ export {
188
+ cleanupBeforeExit,
189
+ getStaticBindingsForScope
190
+ };
2
191
  //# sourceMappingURL=getStaticBindingsForScope.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extractor/getStaticBindingsForScope.ts"],
4
4
  "sourcesContent": ["import { ChildProcess, fork } from 'child_process'\nimport { dirname, extname, join, resolve } from 'path'\n\nimport { Binding, NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\n\nimport { evaluateAstNode } from './evaluateAstNode.js'\nimport { getSourceModule } from './getSourceModule.js'\n\nconst isLocalImport = (path: string) => path.startsWith('.') || path.startsWith('/')\n\nfunction resolveImportPath(sourcePath: string, path: string) {\n const sourceDir = dirname(sourcePath)\n if (isLocalImport(path)) {\n if (extname(path) === '') {\n path += '.js'\n }\n return resolve(sourceDir, path)\n }\n return path\n}\n\nconst cache = new Map()\nconst pending = new Map<string, Promise<any>>()\n\nconst loadCmd = `${join(__dirname, 'loadFile.js')}`\n\nlet exited = false\n\nlet child: ChildProcess | null = null\n\nfunction forkChild() {\n child = fork(loadCmd, [], {\n execArgv: ['-r', 'esbuild-register'],\n detached: false,\n stdio: 'ignore',\n })\n}\n\nexport function cleanupBeforeExit() {\n if (exited) return\n if (!child) return\n child.removeAllListeners()\n child.unref()\n child.disconnect()\n child.kill()\n exited = true\n}\n\nprocess.once('SIGTERM', cleanupBeforeExit)\nprocess.once('SIGINT', cleanupBeforeExit)\nprocess.once('beforeExit', cleanupBeforeExit)\n\nfunction importModule(path: string) {\n if (!child) {\n forkChild()\n }\n if (pending.has(path)) {\n return pending.get(path)\n }\n const promise = new Promise((res, rej) => {\n if (!child) return\n if (cache.size > 2000) {\n cache.clear()\n }\n if (cache.has(path)) {\n return cache.get(path)\n }\n const listener = (msg: any) => {\n if (!child) return\n if (!msg) return\n if (typeof msg !== 'string') return\n if (msg[0] === '-') {\n rej(new Error(msg.slice(1)))\n return\n }\n child.removeListener('message', listener)\n const val = JSON.parse(msg)\n cache.set(path, val)\n res(val)\n }\n child.once('message', listener)\n child.send(`${path.replace('.js', '')}`)\n })\n pending.set(path, promise)\n return promise\n}\n\nexport async function getStaticBindingsForScope(\n scope: NodePath<t.JSXElement>['scope'],\n whitelist: string[] = [],\n sourcePath: string,\n bindingCache: Record<string, string | null>,\n shouldPrintDebug: boolean | 'verbose'\n): Promise<Record<string, any>> {\n const bindings: Record<string, Binding> = scope.getAllBindings() as any\n const ret: Record<string, any> = {}\n\n if (\n shouldPrintDebug\n ) {\n // prettier-ignore\n // console.log(' ', Object.keys(bindings).length, 'variables in scope')\n // .map(x => bindings[x].identifier?.name).join(', ')\n }\n\n // on react native at least it doesnt find some bindings? not sure why\n // lets add in whitelisted imports if they exist\n const program = scope.getProgramParent().block as t.Program\n for (const node of program.body) {\n if (t.isImportDeclaration(node)) {\n const importPath = node.source.value\n if (!node.specifiers.length) continue\n if (!isLocalImport(importPath)) {\n continue\n }\n const moduleName = resolveImportPath(sourcePath, importPath)\n const isOnWhitelist = whitelist.some((test) => moduleName.endsWith(test))\n if (!isOnWhitelist) continue\n try {\n const src = await importModule(moduleName)\n if (!src) continue\n for (const specifier of node.specifiers) {\n if (t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported)) {\n if (typeof src[specifier.imported.name] !== 'undefined') {\n const val = src[specifier.local.name]\n ret[specifier.local.name] = val\n }\n }\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n // eslint-disable-next-line no-console\n console.warn(\n ` | Skipping partial evaluation of constant file: ${moduleName} (DEBUG=tamagui for more)`\n )\n } else if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(`Error in partial evaluation`, err.message, err.stack)\n }\n }\n }\n }\n\n if (!bindingCache) {\n throw new Error('BindingCache is a required param')\n }\n\n for (const k in bindings) {\n const binding = bindings[k]\n\n // check to see if the item is a module\n const sourceModule = getSourceModule(k, binding)\n if (sourceModule) {\n if (!sourceModule.sourceModule) {\n continue\n }\n\n const moduleName = resolveImportPath(sourcePath, sourceModule.sourceModule)\n const isOnWhitelist = whitelist.some((test) => moduleName.endsWith(test))\n\n // TODO we could cache this at the file level.. and check if its been touched since\n\n if (isOnWhitelist) {\n const src = importModule(moduleName)\n if (!src) {\n // eslint-disable-next-line no-console\n console.log(\n ` | \u26A0\uFE0F Missing file ${moduleName} via ${sourcePath} import ${sourceModule.sourceModule}?`\n )\n return {}\n }\n if (sourceModule.destructured) {\n if (sourceModule.imported) {\n ret[k] = src[sourceModule.imported]\n }\n } else {\n ret[k] = src\n }\n }\n continue\n }\n\n const { parent } = binding.path\n\n if (!t.isVariableDeclaration(parent) || parent.kind !== 'const') {\n continue\n }\n\n // pick out the right variable declarator\n const dec = parent.declarations.find((d) => t.isIdentifier(d.id) && d.id.name === k)\n\n // if init is not set, there's nothing to evaluate\n // TODO: handle spread syntax\n if (!dec || !dec.init) {\n continue\n }\n\n // missing start/end will break caching\n if (typeof dec.id.start !== 'number' || typeof dec.id.end !== 'number') {\n // eslint-disable-next-line no-console\n console.error('dec.id.start/end is not a number')\n continue\n }\n\n if (!t.isIdentifier(dec.id)) {\n // eslint-disable-next-line no-console\n console.error('dec is not an identifier')\n continue\n }\n\n const cacheKey = `${dec.id.name}_${dec.id.start}-${dec.id.end}`\n\n // retrieve value from cache\n if (Object.hasOwnProperty.call(bindingCache, cacheKey)) {\n ret[k] = bindingCache[cacheKey]\n continue\n }\n // retrieve value from cache\n if (Object.hasOwnProperty.call(bindingCache, cacheKey)) {\n ret[k] = bindingCache[cacheKey]\n continue\n }\n\n // evaluate\n try {\n ret[k] = evaluateAstNode(dec.init, undefined, shouldPrintDebug)\n bindingCache[cacheKey] = ret[k]\n continue\n } catch {\n // skip\n }\n }\n\n return ret\n}\n"],
5
- "mappings": "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",
6
- "names": ["fork", "dirname", "extname", "join", "resolve", "t", "evaluateAstNode", "getSourceModule", "isLocalImport", "path", "resolveImportPath", "sourcePath", "sourceDir", "cache", "pending", "loadCmd", "exited", "child", "forkChild", "cleanupBeforeExit", "importModule", "promise", "res", "rej", "listener", "msg", "val", "getStaticBindingsForScope", "scope", "whitelist", "bindingCache", "shouldPrintDebug", "_a", "bindings", "ret", "program", "node", "importPath", "moduleName", "test", "src", "specifier", "err", "k", "binding", "sourceModule", "parent", "dec", "d", "cacheKey"]
5
+ "mappings": "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",
6
+ "names": []
7
7
  }
@@ -1,2 +1,191 @@
1
- import{fork as W}from"child_process";import{dirname as $,extname as k,join as B,resolve as b}from"path";import*as m from"@babel/types";import{evaluateAstNode as x}from"./evaluateAstNode.js";import{getSourceModule as N}from"./getSourceModule.js";const h=i=>i.startsWith(".")||i.startsWith("/");function w(i,t){const d=$(i);return h(t)?(k(t)===""&&(t+=".js"),b(d,t)):t}const y=new Map,I=new Map,j=`${B(__dirname,"loadFile.js")}`;let E=!1,r=null;function R(){r=W(j,[],{execArgv:["-r","esbuild-register"],detached:!1,stdio:"ignore"})}function M(){E||r&&(r.removeAllListeners(),r.unref(),r.disconnect(),r.kill(),E=!0)}process.once("SIGTERM",M),process.once("SIGINT",M),process.once("beforeExit",M);function O(i){if(r||R(),I.has(i))return I.get(i);const t=new Promise((d,a)=>{if(!r)return;if(y.size>2e3&&y.clear(),y.has(i))return y.get(i);const u=f=>{if(!r||!f||typeof f!="string")return;if(f[0]==="-"){a(new Error(f.slice(1)));return}r.removeListener("message",u);const o=JSON.parse(f);y.set(i,o),d(o)};r.once("message",u),r.send(`${i.replace(".js","")}`)});return I.set(i,t),t}async function q(i,t=[],d,a,u){var P;const f=i.getAllBindings(),o={},S=i.getProgramParent().block;for(const n of S.body)if(m.isImportDeclaration(n)){const p=n.source.value;if(!n.specifiers.length||!h(p))continue;const s=w(d,p);if(!t.some(e=>s.endsWith(e)))continue;try{const e=await O(s);if(!e)continue;for(const c of n.specifiers)if(m.isImportSpecifier(c)&&m.isIdentifier(c.imported)&&typeof e[c.imported.name]<"u"){const l=e[c.local.name];o[c.local.name]=l}}catch(e){u?console.warn(` | Skipping partial evaluation of constant file: ${s} (DEBUG=tamagui for more)`):(P=process.env.DEBUG)!=null&&P.startsWith("tamagui")&&console.log("Error in partial evaluation",e.message,e.stack)}}if(!a)throw new Error("BindingCache is a required param");for(const n in f){const p=f[n],s=N(n,p);if(s){if(!s.sourceModule)continue;const l=w(d,s.sourceModule);if(t.some(g=>l.endsWith(g))){const g=O(l);if(!g)return console.log(` | \u26A0\uFE0F Missing file ${l} via ${d} import ${s.sourceModule}?`),{};s.destructured?s.imported&&(o[n]=g[s.imported]):o[n]=g}continue}const{parent:v}=p.path;if(!m.isVariableDeclaration(v)||v.kind!=="const")continue;const e=v.declarations.find(l=>m.isIdentifier(l.id)&&l.id.name===n);if(!e||!e.init)continue;if(typeof e.id.start!="number"||typeof e.id.end!="number"){console.error("dec.id.start/end is not a number");continue}if(!m.isIdentifier(e.id)){console.error("dec is not an identifier");continue}const c=`${e.id.name}_${e.id.start}-${e.id.end}`;if(Object.hasOwnProperty.call(a,c)){o[n]=a[c];continue}if(Object.hasOwnProperty.call(a,c)){o[n]=a[c];continue}try{o[n]=x(e.init,void 0,u),a[c]=o[n];continue}catch{}}return o}export{M as cleanupBeforeExit,q as getStaticBindingsForScope};
1
+ import { fork } from "child_process";
2
+ import { dirname, extname, join, resolve } from "path";
3
+ import * as t from "@babel/types";
4
+ import { evaluateAstNode } from "./evaluateAstNode.js";
5
+ import { getSourceModule } from "./getSourceModule.js";
6
+ const isLocalImport = (path) => path.startsWith(".") || path.startsWith("/");
7
+ function resolveImportPath(sourcePath, path) {
8
+ const sourceDir = dirname(sourcePath);
9
+ if (isLocalImport(path)) {
10
+ if (extname(path) === "") {
11
+ path += ".js";
12
+ }
13
+ return resolve(sourceDir, path);
14
+ }
15
+ return path;
16
+ }
17
+ const cache = /* @__PURE__ */ new Map();
18
+ const pending = /* @__PURE__ */ new Map();
19
+ const loadCmd = `${join(__dirname, "loadFile.js")}`;
20
+ let exited = false;
21
+ let child = null;
22
+ function forkChild() {
23
+ child = fork(loadCmd, [], {
24
+ execArgv: ["-r", "esbuild-register"],
25
+ detached: false,
26
+ stdio: "ignore"
27
+ });
28
+ }
29
+ function cleanupBeforeExit() {
30
+ if (exited)
31
+ return;
32
+ if (!child)
33
+ return;
34
+ child.removeAllListeners();
35
+ child.unref();
36
+ child.disconnect();
37
+ child.kill();
38
+ exited = true;
39
+ }
40
+ process.once("SIGTERM", cleanupBeforeExit);
41
+ process.once("SIGINT", cleanupBeforeExit);
42
+ process.once("beforeExit", cleanupBeforeExit);
43
+ function importModule(path) {
44
+ if (!child) {
45
+ forkChild();
46
+ }
47
+ if (pending.has(path)) {
48
+ return pending.get(path);
49
+ }
50
+ const promise = new Promise((res, rej) => {
51
+ if (!child)
52
+ return;
53
+ if (cache.size > 2e3) {
54
+ cache.clear();
55
+ }
56
+ if (cache.has(path)) {
57
+ return cache.get(path);
58
+ }
59
+ const listener = (msg) => {
60
+ if (!child)
61
+ return;
62
+ if (!msg)
63
+ return;
64
+ if (typeof msg !== "string")
65
+ return;
66
+ if (msg[0] === "-") {
67
+ rej(new Error(msg.slice(1)));
68
+ return;
69
+ }
70
+ child.removeListener("message", listener);
71
+ const val = JSON.parse(msg);
72
+ cache.set(path, val);
73
+ res(val);
74
+ };
75
+ child.once("message", listener);
76
+ child.send(`${path.replace(".js", "")}`);
77
+ });
78
+ pending.set(path, promise);
79
+ return promise;
80
+ }
81
+ async function getStaticBindingsForScope(scope, whitelist = [], sourcePath, bindingCache, shouldPrintDebug) {
82
+ var _a;
83
+ const bindings = scope.getAllBindings();
84
+ const ret = {};
85
+ if (shouldPrintDebug) {
86
+ }
87
+ const program = scope.getProgramParent().block;
88
+ for (const node of program.body) {
89
+ if (t.isImportDeclaration(node)) {
90
+ const importPath = node.source.value;
91
+ if (!node.specifiers.length)
92
+ continue;
93
+ if (!isLocalImport(importPath)) {
94
+ continue;
95
+ }
96
+ const moduleName = resolveImportPath(sourcePath, importPath);
97
+ const isOnWhitelist = whitelist.some((test) => moduleName.endsWith(test));
98
+ if (!isOnWhitelist)
99
+ continue;
100
+ try {
101
+ const src = await importModule(moduleName);
102
+ if (!src)
103
+ continue;
104
+ for (const specifier of node.specifiers) {
105
+ if (t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported)) {
106
+ if (typeof src[specifier.imported.name] !== "undefined") {
107
+ const val = src[specifier.local.name];
108
+ ret[specifier.local.name] = val;
109
+ }
110
+ }
111
+ }
112
+ } catch (err) {
113
+ if (shouldPrintDebug) {
114
+ console.warn(
115
+ ` | Skipping partial evaluation of constant file: ${moduleName} (DEBUG=tamagui for more)`
116
+ );
117
+ } else if ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui")) {
118
+ console.log(`Error in partial evaluation`, err.message, err.stack);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ if (!bindingCache) {
124
+ throw new Error("BindingCache is a required param");
125
+ }
126
+ for (const k in bindings) {
127
+ const binding = bindings[k];
128
+ const sourceModule = getSourceModule(k, binding);
129
+ if (sourceModule) {
130
+ if (!sourceModule.sourceModule) {
131
+ continue;
132
+ }
133
+ const moduleName = resolveImportPath(sourcePath, sourceModule.sourceModule);
134
+ const isOnWhitelist = whitelist.some((test) => moduleName.endsWith(test));
135
+ if (isOnWhitelist) {
136
+ const src = importModule(moduleName);
137
+ if (!src) {
138
+ console.log(
139
+ ` | \u26A0\uFE0F Missing file ${moduleName} via ${sourcePath} import ${sourceModule.sourceModule}?`
140
+ );
141
+ return {};
142
+ }
143
+ if (sourceModule.destructured) {
144
+ if (sourceModule.imported) {
145
+ ret[k] = src[sourceModule.imported];
146
+ }
147
+ } else {
148
+ ret[k] = src;
149
+ }
150
+ }
151
+ continue;
152
+ }
153
+ const { parent } = binding.path;
154
+ if (!t.isVariableDeclaration(parent) || parent.kind !== "const") {
155
+ continue;
156
+ }
157
+ const dec = parent.declarations.find((d) => t.isIdentifier(d.id) && d.id.name === k);
158
+ if (!dec || !dec.init) {
159
+ continue;
160
+ }
161
+ if (typeof dec.id.start !== "number" || typeof dec.id.end !== "number") {
162
+ console.error("dec.id.start/end is not a number");
163
+ continue;
164
+ }
165
+ if (!t.isIdentifier(dec.id)) {
166
+ console.error("dec is not an identifier");
167
+ continue;
168
+ }
169
+ const cacheKey = `${dec.id.name}_${dec.id.start}-${dec.id.end}`;
170
+ if (Object.hasOwnProperty.call(bindingCache, cacheKey)) {
171
+ ret[k] = bindingCache[cacheKey];
172
+ continue;
173
+ }
174
+ if (Object.hasOwnProperty.call(bindingCache, cacheKey)) {
175
+ ret[k] = bindingCache[cacheKey];
176
+ continue;
177
+ }
178
+ try {
179
+ ret[k] = evaluateAstNode(dec.init, void 0, shouldPrintDebug);
180
+ bindingCache[cacheKey] = ret[k];
181
+ continue;
182
+ } catch {
183
+ }
184
+ }
185
+ return ret;
186
+ }
187
+ export {
188
+ cleanupBeforeExit,
189
+ getStaticBindingsForScope
190
+ };
2
191
  //# sourceMappingURL=getStaticBindingsForScope.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extractor/getStaticBindingsForScope.ts"],
4
4
  "sourcesContent": ["import { ChildProcess, fork } from 'child_process'\nimport { dirname, extname, join, resolve } from 'path'\n\nimport { Binding, NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\n\nimport { evaluateAstNode } from './evaluateAstNode.js'\nimport { getSourceModule } from './getSourceModule.js'\n\nconst isLocalImport = (path: string) => path.startsWith('.') || path.startsWith('/')\n\nfunction resolveImportPath(sourcePath: string, path: string) {\n const sourceDir = dirname(sourcePath)\n if (isLocalImport(path)) {\n if (extname(path) === '') {\n path += '.js'\n }\n return resolve(sourceDir, path)\n }\n return path\n}\n\nconst cache = new Map()\nconst pending = new Map<string, Promise<any>>()\n\nconst loadCmd = `${join(__dirname, 'loadFile.js')}`\n\nlet exited = false\n\nlet child: ChildProcess | null = null\n\nfunction forkChild() {\n child = fork(loadCmd, [], {\n execArgv: ['-r', 'esbuild-register'],\n detached: false,\n stdio: 'ignore',\n })\n}\n\nexport function cleanupBeforeExit() {\n if (exited) return\n if (!child) return\n child.removeAllListeners()\n child.unref()\n child.disconnect()\n child.kill()\n exited = true\n}\n\nprocess.once('SIGTERM', cleanupBeforeExit)\nprocess.once('SIGINT', cleanupBeforeExit)\nprocess.once('beforeExit', cleanupBeforeExit)\n\nfunction importModule(path: string) {\n if (!child) {\n forkChild()\n }\n if (pending.has(path)) {\n return pending.get(path)\n }\n const promise = new Promise((res, rej) => {\n if (!child) return\n if (cache.size > 2000) {\n cache.clear()\n }\n if (cache.has(path)) {\n return cache.get(path)\n }\n const listener = (msg: any) => {\n if (!child) return\n if (!msg) return\n if (typeof msg !== 'string') return\n if (msg[0] === '-') {\n rej(new Error(msg.slice(1)))\n return\n }\n child.removeListener('message', listener)\n const val = JSON.parse(msg)\n cache.set(path, val)\n res(val)\n }\n child.once('message', listener)\n child.send(`${path.replace('.js', '')}`)\n })\n pending.set(path, promise)\n return promise\n}\n\nexport async function getStaticBindingsForScope(\n scope: NodePath<t.JSXElement>['scope'],\n whitelist: string[] = [],\n sourcePath: string,\n bindingCache: Record<string, string | null>,\n shouldPrintDebug: boolean | 'verbose'\n): Promise<Record<string, any>> {\n const bindings: Record<string, Binding> = scope.getAllBindings() as any\n const ret: Record<string, any> = {}\n\n if (\n shouldPrintDebug\n ) {\n // prettier-ignore\n // console.log(' ', Object.keys(bindings).length, 'variables in scope')\n // .map(x => bindings[x].identifier?.name).join(', ')\n }\n\n // on react native at least it doesnt find some bindings? not sure why\n // lets add in whitelisted imports if they exist\n const program = scope.getProgramParent().block as t.Program\n for (const node of program.body) {\n if (t.isImportDeclaration(node)) {\n const importPath = node.source.value\n if (!node.specifiers.length) continue\n if (!isLocalImport(importPath)) {\n continue\n }\n const moduleName = resolveImportPath(sourcePath, importPath)\n const isOnWhitelist = whitelist.some((test) => moduleName.endsWith(test))\n if (!isOnWhitelist) continue\n try {\n const src = await importModule(moduleName)\n if (!src) continue\n for (const specifier of node.specifiers) {\n if (t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported)) {\n if (typeof src[specifier.imported.name] !== 'undefined') {\n const val = src[specifier.local.name]\n ret[specifier.local.name] = val\n }\n }\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n // eslint-disable-next-line no-console\n console.warn(\n ` | Skipping partial evaluation of constant file: ${moduleName} (DEBUG=tamagui for more)`\n )\n } else if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(`Error in partial evaluation`, err.message, err.stack)\n }\n }\n }\n }\n\n if (!bindingCache) {\n throw new Error('BindingCache is a required param')\n }\n\n for (const k in bindings) {\n const binding = bindings[k]\n\n // check to see if the item is a module\n const sourceModule = getSourceModule(k, binding)\n if (sourceModule) {\n if (!sourceModule.sourceModule) {\n continue\n }\n\n const moduleName = resolveImportPath(sourcePath, sourceModule.sourceModule)\n const isOnWhitelist = whitelist.some((test) => moduleName.endsWith(test))\n\n // TODO we could cache this at the file level.. and check if its been touched since\n\n if (isOnWhitelist) {\n const src = importModule(moduleName)\n if (!src) {\n // eslint-disable-next-line no-console\n console.log(\n ` | \u26A0\uFE0F Missing file ${moduleName} via ${sourcePath} import ${sourceModule.sourceModule}?`\n )\n return {}\n }\n if (sourceModule.destructured) {\n if (sourceModule.imported) {\n ret[k] = src[sourceModule.imported]\n }\n } else {\n ret[k] = src\n }\n }\n continue\n }\n\n const { parent } = binding.path\n\n if (!t.isVariableDeclaration(parent) || parent.kind !== 'const') {\n continue\n }\n\n // pick out the right variable declarator\n const dec = parent.declarations.find((d) => t.isIdentifier(d.id) && d.id.name === k)\n\n // if init is not set, there's nothing to evaluate\n // TODO: handle spread syntax\n if (!dec || !dec.init) {\n continue\n }\n\n // missing start/end will break caching\n if (typeof dec.id.start !== 'number' || typeof dec.id.end !== 'number') {\n // eslint-disable-next-line no-console\n console.error('dec.id.start/end is not a number')\n continue\n }\n\n if (!t.isIdentifier(dec.id)) {\n // eslint-disable-next-line no-console\n console.error('dec is not an identifier')\n continue\n }\n\n const cacheKey = `${dec.id.name}_${dec.id.start}-${dec.id.end}`\n\n // retrieve value from cache\n if (Object.hasOwnProperty.call(bindingCache, cacheKey)) {\n ret[k] = bindingCache[cacheKey]\n continue\n }\n // retrieve value from cache\n if (Object.hasOwnProperty.call(bindingCache, cacheKey)) {\n ret[k] = bindingCache[cacheKey]\n continue\n }\n\n // evaluate\n try {\n ret[k] = evaluateAstNode(dec.init, undefined, shouldPrintDebug)\n bindingCache[cacheKey] = ret[k]\n continue\n } catch {\n // skip\n }\n }\n\n return ret\n}\n"],
5
- "mappings": "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",
6
- "names": ["fork", "dirname", "extname", "join", "resolve", "t", "evaluateAstNode", "getSourceModule", "isLocalImport", "path", "resolveImportPath", "sourcePath", "sourceDir", "cache", "pending", "loadCmd", "exited", "child", "forkChild", "cleanupBeforeExit", "importModule", "promise", "res", "rej", "listener", "msg", "val", "getStaticBindingsForScope", "scope", "whitelist", "bindingCache", "shouldPrintDebug", "_a", "bindings", "ret", "program", "node", "importPath", "moduleName", "test", "src", "specifier", "err", "k", "binding", "sourceModule", "parent", "dec", "d", "cacheKey"]
5
+ "mappings": "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",
6
+ "names": []
7
7
  }
@@ -1,2 +1,41 @@
1
- import*as i from"@babel/types";function c(e,r,t){const n=c.bind(null,e,r);if(i.isStringLiteral(t)){if(t.value.trim()==="")return t;if(r[t.value])return r[t.value];const o=l(t);return r[t.value]=o,o}if(i.isBinaryExpression(t))return i.binaryExpression(t.operator,n(t.left),n(t.right));if(i.isLogicalExpression(t))return i.logicalExpression(t.operator,n(t.left),n(t.right));if(i.isConditionalExpression(t))return i.conditionalExpression(t.test,n(t.consequent),n(t.alternate));return t;function l(o){const a=e.scope.generateUidIdentifier("cn"),s=e.findParent(u=>u.isProgram());if(!s)throw new Error("no program?");const f=i.variableDeclaration("const",[i.variableDeclarator(a,i.stringLiteral(` ${o.value}`))]);return s.unshiftContainer("body",f),a}}export{c as hoistClassNames};
1
+ import * as t from "@babel/types";
2
+ function hoistClassNames(path, existing, expr) {
3
+ const hoist = hoistClassNames.bind(null, path, existing);
4
+ if (t.isStringLiteral(expr)) {
5
+ if (expr.value.trim() === "") {
6
+ return expr;
7
+ }
8
+ if (existing[expr.value]) {
9
+ return existing[expr.value];
10
+ }
11
+ const identifier = replaceStringWithVariable(expr);
12
+ existing[expr.value] = identifier;
13
+ return identifier;
14
+ }
15
+ if (t.isBinaryExpression(expr)) {
16
+ return t.binaryExpression(expr.operator, hoist(expr.left), hoist(expr.right));
17
+ }
18
+ if (t.isLogicalExpression(expr)) {
19
+ return t.logicalExpression(expr.operator, hoist(expr.left), hoist(expr.right));
20
+ }
21
+ if (t.isConditionalExpression(expr)) {
22
+ return t.conditionalExpression(expr.test, hoist(expr.consequent), hoist(expr.alternate));
23
+ }
24
+ return expr;
25
+ function replaceStringWithVariable(str) {
26
+ const uid = path.scope.generateUidIdentifier("cn");
27
+ const parent = path.findParent((path2) => path2.isProgram());
28
+ if (!parent)
29
+ throw new Error(`no program?`);
30
+ const variable = t.variableDeclaration("const", [
31
+ // adding a space for extra safety
32
+ t.variableDeclarator(uid, t.stringLiteral(` ${str.value}`))
33
+ ]);
34
+ parent.unshiftContainer("body", variable);
35
+ return uid;
36
+ }
37
+ }
38
+ export {
39
+ hoistClassNames
40
+ };
2
41
  //# sourceMappingURL=hoistClassNames.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extractor/hoistClassNames.ts"],
4
4
  "sourcesContent": ["import { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\n\nexport function hoistClassNames(\n path: NodePath<t.JSXElement>,\n existing: { [key: string]: t.Identifier },\n expr: t.Expression\n) {\n const hoist = hoistClassNames.bind(null, path, existing)\n if (t.isStringLiteral(expr)) {\n if (expr.value.trim() === '') {\n return expr\n }\n if (existing[expr.value]) {\n return existing[expr.value]\n }\n const identifier = replaceStringWithVariable(expr)\n existing[expr.value] = identifier\n return identifier\n }\n if (t.isBinaryExpression(expr)) {\n return t.binaryExpression(expr.operator, hoist(expr.left), hoist(expr.right))\n }\n if (t.isLogicalExpression(expr)) {\n return t.logicalExpression(expr.operator, hoist(expr.left), hoist(expr.right))\n }\n if (t.isConditionalExpression(expr)) {\n return t.conditionalExpression(expr.test, hoist(expr.consequent), hoist(expr.alternate))\n }\n return expr\n\n function replaceStringWithVariable(str: t.StringLiteral): t.Identifier {\n // hoist outside fn!\n const uid = path.scope.generateUidIdentifier('cn')\n const parent = path.findParent((path) => path.isProgram())\n if (!parent) throw new Error(`no program?`)\n const variable = t.variableDeclaration('const', [\n // adding a space for extra safety\n t.variableDeclarator(uid, t.stringLiteral(` ${str.value}`)),\n ])\n // @ts-ignore\n parent.unshiftContainer('body', variable)\n return uid\n }\n}\n"],
5
- "mappings": "AACA,UAAYA,MAAO,eAEZ,SAASC,EACdC,EACAC,EACAC,EACA,CACA,MAAMC,EAAQJ,EAAgB,KAAK,KAAMC,EAAMC,CAAQ,EACvD,GAAIH,EAAE,gBAAgBI,CAAI,EAAG,CAC3B,GAAIA,EAAK,MAAM,KAAK,IAAM,GACxB,OAAOA,EAET,GAAID,EAASC,EAAK,KAAK,EACrB,OAAOD,EAASC,EAAK,KAAK,EAE5B,MAAME,EAAaC,EAA0BH,CAAI,EACjD,OAAAD,EAASC,EAAK,KAAK,EAAIE,EAChBA,CACT,CACA,GAAIN,EAAE,mBAAmBI,CAAI,EAC3B,OAAOJ,EAAE,iBAAiBI,EAAK,SAAUC,EAAMD,EAAK,IAAI,EAAGC,EAAMD,EAAK,KAAK,CAAC,EAE9E,GAAIJ,EAAE,oBAAoBI,CAAI,EAC5B,OAAOJ,EAAE,kBAAkBI,EAAK,SAAUC,EAAMD,EAAK,IAAI,EAAGC,EAAMD,EAAK,KAAK,CAAC,EAE/E,GAAIJ,EAAE,wBAAwBI,CAAI,EAChC,OAAOJ,EAAE,sBAAsBI,EAAK,KAAMC,EAAMD,EAAK,UAAU,EAAGC,EAAMD,EAAK,SAAS,CAAC,EAEzF,OAAOA,EAEP,SAASG,EAA0BC,EAAoC,CAErE,MAAMC,EAAMP,EAAK,MAAM,sBAAsB,IAAI,EAC3CQ,EAASR,EAAK,WAAYA,GAASA,EAAK,UAAU,CAAC,EACzD,GAAI,CAACQ,EAAQ,MAAM,IAAI,MAAM,aAAa,EAC1C,MAAMC,EAAWX,EAAE,oBAAoB,QAAS,CAE9CA,EAAE,mBAAmBS,EAAKT,EAAE,cAAc,IAAIQ,EAAI,OAAO,CAAC,CAC5D,CAAC,EAED,OAAAE,EAAO,iBAAiB,OAAQC,CAAQ,EACjCF,CACT,CACF",
6
- "names": ["t", "hoistClassNames", "path", "existing", "expr", "hoist", "identifier", "replaceStringWithVariable", "str", "uid", "parent", "variable"]
5
+ "mappings": "AACA,YAAY,OAAO;AAEZ,SAAS,gBACd,MACA,UACA,MACA;AACA,QAAM,QAAQ,gBAAgB,KAAK,MAAM,MAAM,QAAQ;AACvD,MAAI,EAAE,gBAAgB,IAAI,GAAG;AAC3B,QAAI,KAAK,MAAM,KAAK,MAAM,IAAI;AAC5B,aAAO;AAAA,IACT;AACA,QAAI,SAAS,KAAK,KAAK,GAAG;AACxB,aAAO,SAAS,KAAK,KAAK;AAAA,IAC5B;AACA,UAAM,aAAa,0BAA0B,IAAI;AACjD,aAAS,KAAK,KAAK,IAAI;AACvB,WAAO;AAAA,EACT;AACA,MAAI,EAAE,mBAAmB,IAAI,GAAG;AAC9B,WAAO,EAAE,iBAAiB,KAAK,UAAU,MAAM,KAAK,IAAI,GAAG,MAAM,KAAK,KAAK,CAAC;AAAA,EAC9E;AACA,MAAI,EAAE,oBAAoB,IAAI,GAAG;AAC/B,WAAO,EAAE,kBAAkB,KAAK,UAAU,MAAM,KAAK,IAAI,GAAG,MAAM,KAAK,KAAK,CAAC;AAAA,EAC/E;AACA,MAAI,EAAE,wBAAwB,IAAI,GAAG;AACnC,WAAO,EAAE,sBAAsB,KAAK,MAAM,MAAM,KAAK,UAAU,GAAG,MAAM,KAAK,SAAS,CAAC;AAAA,EACzF;AACA,SAAO;AAEP,WAAS,0BAA0B,KAAoC;AAErE,UAAM,MAAM,KAAK,MAAM,sBAAsB,IAAI;AACjD,UAAM,SAAS,KAAK,WAAW,CAACA,UAASA,MAAK,UAAU,CAAC;AACzD,QAAI,CAAC;AAAQ,YAAM,IAAI,MAAM,aAAa;AAC1C,UAAM,WAAW,EAAE,oBAAoB,SAAS;AAAA;AAAA,MAE9C,EAAE,mBAAmB,KAAK,EAAE,cAAc,IAAI,IAAI,OAAO,CAAC;AAAA,IAC5D,CAAC;AAED,WAAO,iBAAiB,QAAQ,QAAQ;AACxC,WAAO;AAAA,EACT;AACF;",
6
+ "names": ["path"]
7
7
  }
@@ -1,2 +1,41 @@
1
- import*as i from"@babel/types";function c(e,r,t){const n=c.bind(null,e,r);if(i.isStringLiteral(t)){if(t.value.trim()==="")return t;if(r[t.value])return r[t.value];const o=l(t);return r[t.value]=o,o}if(i.isBinaryExpression(t))return i.binaryExpression(t.operator,n(t.left),n(t.right));if(i.isLogicalExpression(t))return i.logicalExpression(t.operator,n(t.left),n(t.right));if(i.isConditionalExpression(t))return i.conditionalExpression(t.test,n(t.consequent),n(t.alternate));return t;function l(o){const a=e.scope.generateUidIdentifier("cn"),s=e.findParent(u=>u.isProgram());if(!s)throw new Error("no program?");const f=i.variableDeclaration("const",[i.variableDeclarator(a,i.stringLiteral(` ${o.value}`))]);return s.unshiftContainer("body",f),a}}export{c as hoistClassNames};
1
+ import * as t from "@babel/types";
2
+ function hoistClassNames(path, existing, expr) {
3
+ const hoist = hoistClassNames.bind(null, path, existing);
4
+ if (t.isStringLiteral(expr)) {
5
+ if (expr.value.trim() === "") {
6
+ return expr;
7
+ }
8
+ if (existing[expr.value]) {
9
+ return existing[expr.value];
10
+ }
11
+ const identifier = replaceStringWithVariable(expr);
12
+ existing[expr.value] = identifier;
13
+ return identifier;
14
+ }
15
+ if (t.isBinaryExpression(expr)) {
16
+ return t.binaryExpression(expr.operator, hoist(expr.left), hoist(expr.right));
17
+ }
18
+ if (t.isLogicalExpression(expr)) {
19
+ return t.logicalExpression(expr.operator, hoist(expr.left), hoist(expr.right));
20
+ }
21
+ if (t.isConditionalExpression(expr)) {
22
+ return t.conditionalExpression(expr.test, hoist(expr.consequent), hoist(expr.alternate));
23
+ }
24
+ return expr;
25
+ function replaceStringWithVariable(str) {
26
+ const uid = path.scope.generateUidIdentifier("cn");
27
+ const parent = path.findParent((path2) => path2.isProgram());
28
+ if (!parent)
29
+ throw new Error(`no program?`);
30
+ const variable = t.variableDeclaration("const", [
31
+ // adding a space for extra safety
32
+ t.variableDeclarator(uid, t.stringLiteral(` ${str.value}`))
33
+ ]);
34
+ parent.unshiftContainer("body", variable);
35
+ return uid;
36
+ }
37
+ }
38
+ export {
39
+ hoistClassNames
40
+ };
2
41
  //# sourceMappingURL=hoistClassNames.mjs.map