@hanzogui/static 3.0.6 → 4.3.1
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/check-dep-versions.cjs +201 -96
- package/dist/checkDeps.cjs +163 -92
- package/dist/constants.cjs +32 -30
- package/dist/exports.cjs +15 -13
- package/dist/extractor/accessSafe.cjs +25 -23
- package/dist/extractor/babelParse.cjs +30 -28
- package/dist/extractor/buildClassName.cjs +59 -35
- package/dist/extractor/bundle.cjs +159 -104
- package/dist/extractor/bundleConfig.cjs +463 -263
- package/dist/extractor/concatClassName.cjs +41 -29
- package/dist/extractor/createEvaluator.cjs +54 -41
- package/dist/extractor/createExtractor.cjs +1338 -661
- package/dist/extractor/createLogger.cjs +30 -25
- package/dist/extractor/detectModuleFormat.cjs +22 -16
- package/dist/extractor/ensureImportingConcat.cjs +31 -25
- package/dist/extractor/errors.cjs +12 -10
- package/dist/extractor/esbuildAliasPlugin.cjs +28 -16
- package/dist/extractor/esbuildTsconfigPaths.cjs +58 -36
- package/dist/extractor/evaluateAstNode.cjs +104 -59
- package/dist/extractor/extractHelpers.cjs +130 -67
- package/dist/extractor/extractMediaStyle.cjs +110 -69
- package/dist/extractor/extractToClassNames.cjs +336 -230
- package/dist/extractor/extractToNative.cjs +244 -149
- package/dist/extractor/findTopmostFunction.cjs +22 -13
- package/dist/extractor/generatedUid.cjs +39 -28
- package/dist/extractor/getGuiConfigPathFromOptionsConfig.cjs +20 -14
- package/dist/extractor/getPrefixLogs.cjs +12 -10
- package/dist/extractor/getPropValueFromAttributes.cjs +52 -34
- package/dist/extractor/getSourceModule.cjs +73 -37
- package/dist/extractor/getStaticBindingsForScope.cjs +131 -68
- package/dist/extractor/hoistClassNames.cjs +46 -32
- package/dist/extractor/literalToAst.cjs +67 -42
- package/dist/extractor/loadFile.cjs +9 -3
- package/dist/extractor/loadGui.cjs +198 -109
- package/dist/extractor/logLines.cjs +27 -19
- package/dist/extractor/normalizeTernaries.cjs +66 -44
- package/dist/extractor/propsToFontFamilyCache.cjs +15 -11
- package/dist/extractor/regenerateConfig.cjs +109 -81
- package/dist/extractor/removeUnusedHooks.cjs +73 -41
- package/dist/extractor/timer.cjs +23 -14
- package/dist/extractor/validHTMLAttributes.cjs +61 -59
- package/dist/extractor/watchGuiConfig.cjs +35 -23
- package/dist/getPragmaOptions.cjs +34 -19
- package/dist/helpers/memoize.cjs +24 -16
- package/dist/helpers/requireGuiCore.cjs +22 -15
- package/dist/index.cjs +26 -24
- package/dist/registerRequire.cjs +132 -77
- package/dist/server.cjs +35 -28
- package/dist/types.cjs +7 -5
- package/dist/worker.cjs +62 -40
- package/package.json +2 -2
- package/src/checkDeps.ts +1 -1
- package/src/extractor/bundle.ts +1 -1
- package/src/extractor/bundleConfig.ts +5 -5
- package/src/extractor/createExtractor.ts +28 -13
- package/src/extractor/createLogger.ts +1 -3
- package/src/extractor/extractToNative.ts +35 -9
- package/src/extractor/loadGui.ts +4 -4
- package/src/extractor/regenerateConfig.ts +2 -2
- package/src/getPragmaOptions.ts +2 -2
- package/src/helpers/requireGuiCore.ts +6 -6
- package/src/registerRequire.ts +4 -4
- package/src/worker.ts +1 -1
- package/types/extractor/createExtractor.d.ts.map +1 -1
- package/types/extractor/createLogger.d.ts.map +1 -1
- package/types/extractor/extractToNative.d.ts.map +1 -1
- package/types/worker.d.ts +1 -1
|
@@ -2,33 +2,35 @@ var __create = Object.create;
|
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf
|
|
6
|
-
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __export = (target, all) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
15
16
|
get: () => from[key],
|
|
16
17
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
18
|
});
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
20
22
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
28
|
+
value: mod,
|
|
29
|
+
enumerable: true
|
|
30
|
+
}) : target, mod));
|
|
31
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
32
|
+
value: true
|
|
33
|
+
}), mod);
|
|
32
34
|
var extractToNative_exports = {};
|
|
33
35
|
__export(extractToNative_exports, {
|
|
34
36
|
extractToNative: () => extractToNative,
|
|
@@ -36,48 +38,53 @@ __export(extractToNative_exports, {
|
|
|
36
38
|
getBabelPlugin: () => getBabelPlugin
|
|
37
39
|
});
|
|
38
40
|
module.exports = __toCommonJS(extractToNative_exports);
|
|
39
|
-
var import_core = require("@babel/core")
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
var import_core = require("@babel/core");
|
|
42
|
+
var import_generator = __toESM(require("@babel/generator"));
|
|
43
|
+
var import_helper_plugin_utils = require("@babel/helper-plugin-utils");
|
|
44
|
+
var import_parser = require("@babel/parser");
|
|
45
|
+
var import_template = __toESM(require("@babel/template"));
|
|
46
|
+
var t = __toESM(require("@babel/types"));
|
|
47
|
+
var import_node_path = require("node:path");
|
|
48
|
+
var import_getPragmaOptions = require("../getPragmaOptions.cjs");
|
|
49
|
+
var import_createExtractor = require("./createExtractor.cjs");
|
|
50
|
+
var import_createLogger = require("./createLogger.cjs");
|
|
51
|
+
var import_extractHelpers = require("./extractHelpers.cjs");
|
|
52
|
+
var import_literalToAst = require("./literalToAst.cjs");
|
|
53
|
+
var import_loadGui = require("./loadGui.cjs");
|
|
52
54
|
const importNativeView = (0, import_template.default)(`
|
|
53
55
|
const __ReactNativeView = require('react-native').View;
|
|
54
56
|
const __ReactNativeText = require('react-native').Text;
|
|
55
|
-
`)
|
|
56
|
-
|
|
57
|
+
`);
|
|
58
|
+
const importStyleSheet = (0, import_template.default)(`
|
|
57
59
|
const __ReactNativeStyleSheet = require('react-native').StyleSheet;
|
|
58
|
-
`)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
`);
|
|
61
|
+
const importWithStyle = import_template.default.ast(`import { _withStableStyle } from '@hanzogui/core';`);
|
|
62
|
+
const extractor = (0, import_createExtractor.createExtractor)({
|
|
63
|
+
platform: "native"
|
|
64
|
+
});
|
|
63
65
|
let guiBuildOptionsLoaded;
|
|
64
66
|
function extractToNative(sourceFileName, sourceCode, options) {
|
|
65
67
|
const ast = (0, import_parser.parse)(sourceCode, {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (!out)
|
|
68
|
+
sourceType: "module",
|
|
69
|
+
plugins: ["jsx", "typescript"]
|
|
70
|
+
});
|
|
71
|
+
const babelPlugin = getBabelPlugin();
|
|
72
|
+
const out = (0, import_core.transformFromAstSync)(ast, sourceCode, {
|
|
73
|
+
plugins: [[babelPlugin, options]],
|
|
74
|
+
configFile: false,
|
|
75
|
+
sourceFileName,
|
|
76
|
+
filename: sourceFileName
|
|
77
|
+
});
|
|
78
|
+
if (!out) {
|
|
79
|
+
throw new Error(`No output returned`);
|
|
80
|
+
}
|
|
77
81
|
return out;
|
|
78
82
|
}
|
|
79
83
|
function getBabelPlugin() {
|
|
80
|
-
return (0, import_helper_plugin_utils.declare)((api, options) =>
|
|
84
|
+
return (0, import_helper_plugin_utils.declare)((api, options) => {
|
|
85
|
+
api.assertVersion(7);
|
|
86
|
+
return getBabelParseDefinition(options);
|
|
87
|
+
});
|
|
81
88
|
}
|
|
82
89
|
function getBabelParseDefinition(options) {
|
|
83
90
|
return {
|
|
@@ -86,46 +93,59 @@ function getBabelParseDefinition(options) {
|
|
|
86
93
|
Program: {
|
|
87
94
|
enter(root) {
|
|
88
95
|
let sourcePath = this.file.opts.filename;
|
|
89
|
-
if (sourcePath?.includes("node_modules")
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
96
|
+
if (sourcePath?.includes("node_modules")) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (!sourcePath?.endsWith(".jsx") && !sourcePath?.endsWith(".tsx")) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (process.env.SOURCE_ROOT?.endsWith("ios")) {
|
|
103
|
+
sourcePath = sourcePath.replace("/ios", "");
|
|
104
|
+
}
|
|
105
|
+
let hasImportedView = false;
|
|
106
|
+
let hasImportedViewWrapper = false;
|
|
107
|
+
let wrapperCount = 0;
|
|
108
|
+
const sheetStyles = {};
|
|
109
|
+
const sheetIdentifier = root.scope.generateUidIdentifier("sheet");
|
|
110
|
+
const firstCommentContents =
|
|
111
|
+
// join because you can join together multiple pragmas
|
|
112
|
+
root.node.body[0]?.leadingComments?.map(comment => comment?.value || " ").join(" ") ?? "";
|
|
113
|
+
const firstComment = firstCommentContents ? `//${firstCommentContents}` : "";
|
|
114
|
+
const {
|
|
115
|
+
shouldPrintDebug,
|
|
116
|
+
shouldDisable
|
|
117
|
+
} = (0, import_getPragmaOptions.getPragmaOptions)({
|
|
118
|
+
source: firstComment,
|
|
119
|
+
path: sourcePath
|
|
120
|
+
});
|
|
121
|
+
if (shouldDisable) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (!options.config && !options.components) {
|
|
125
|
+
guiBuildOptionsLoaded ||= (0, import_loadGui.loadGuiBuildConfigSync)({});
|
|
126
|
+
}
|
|
109
127
|
const finalOptions = {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
128
|
+
// @ts-ignore just in case they leave it out
|
|
129
|
+
platform: "native",
|
|
130
|
+
...guiBuildOptionsLoaded,
|
|
131
|
+
...options
|
|
132
|
+
};
|
|
133
|
+
const printLog = (0, import_createLogger.createLogger)(sourcePath, finalOptions);
|
|
116
134
|
function addSheetStyle(style, node) {
|
|
117
|
-
|
|
135
|
+
const styleIndex = `${Object.keys(sheetStyles).length}`;
|
|
136
|
+
let key = `${styleIndex}`;
|
|
118
137
|
if (process.env.NODE_ENV === "development") {
|
|
119
138
|
const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
|
|
120
139
|
key += `:${(0, import_node_path.basename)(sourcePath)}:${lineNumbers}`;
|
|
121
140
|
}
|
|
122
|
-
|
|
141
|
+
sheetStyles[key] = style;
|
|
142
|
+
return readStyleExpr(key);
|
|
123
143
|
}
|
|
124
144
|
function readStyleExpr(key) {
|
|
125
|
-
return (0, import_template.default)(
|
|
145
|
+
return (0, import_template.default)(`SHEET['KEY']`)({
|
|
126
146
|
SHEET: sheetIdentifier.name,
|
|
127
147
|
KEY: key
|
|
128
|
-
})
|
|
148
|
+
})["expression"];
|
|
129
149
|
}
|
|
130
150
|
let res;
|
|
131
151
|
try {
|
|
@@ -137,7 +157,7 @@ function getBabelParseDefinition(options) {
|
|
|
137
157
|
shouldPrintDebug,
|
|
138
158
|
...finalOptions,
|
|
139
159
|
// disable extracting variables as no native concept of them (only theme values)
|
|
140
|
-
disableExtractVariables:
|
|
160
|
+
disableExtractVariables: false,
|
|
141
161
|
sourcePath,
|
|
142
162
|
// disabling flattening for now
|
|
143
163
|
// it's flattening a plain <Paragraph>hello</Paragraph> which breaks things because themes
|
|
@@ -147,16 +167,20 @@ function getBabelParseDefinition(options) {
|
|
|
147
167
|
getFlattenedNode({
|
|
148
168
|
isTextView
|
|
149
169
|
}) {
|
|
150
|
-
|
|
170
|
+
if (!hasImportedView) {
|
|
171
|
+
hasImportedView = true;
|
|
172
|
+
root.unshiftContainer("body", importNativeView());
|
|
173
|
+
}
|
|
174
|
+
return isTextView ? "__ReactNativeText" : "__ReactNativeView";
|
|
151
175
|
},
|
|
152
176
|
onExtractTag(props) {
|
|
153
177
|
assertValidTag(props.node);
|
|
154
|
-
const stylesExpr = t.arrayExpression([])
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
function getStyleExpression(style) {
|
|
178
|
+
const stylesExpr = t.arrayExpression([]);
|
|
179
|
+
const hocStylesExpr = t.arrayExpression([]);
|
|
180
|
+
const expressions = [];
|
|
181
|
+
const finalAttrs = [];
|
|
182
|
+
const themeKeysUsed = /* @__PURE__ */new Set();
|
|
183
|
+
function getStyleExpression(style, forTernary = false) {
|
|
160
184
|
if (!style) return;
|
|
161
185
|
const {
|
|
162
186
|
plain,
|
|
@@ -164,100 +188,171 @@ function getBabelParseDefinition(options) {
|
|
|
164
188
|
} = splitThemeStyles(style);
|
|
165
189
|
let themeExpr = null;
|
|
166
190
|
if (themed) {
|
|
167
|
-
for (const key in themed)
|
|
191
|
+
for (const key in themed) {
|
|
192
|
+
themeKeysUsed.add(themed[key].split("$")[1]);
|
|
193
|
+
}
|
|
168
194
|
themeExpr = getThemedStyleExpression(themed);
|
|
169
195
|
}
|
|
170
|
-
const
|
|
171
|
-
|
|
196
|
+
const hasPlainKeys = Object.keys(plain).length > 0;
|
|
197
|
+
const ident = hasPlainKeys ? addSheetStyle(plain, props.node) : null;
|
|
198
|
+
if (themeExpr) {
|
|
199
|
+
if (forTernary) {
|
|
200
|
+
if (ident) {
|
|
201
|
+
return t.arrayExpression([ident, themeExpr]);
|
|
202
|
+
}
|
|
203
|
+
return themeExpr;
|
|
204
|
+
}
|
|
205
|
+
if (ident) {
|
|
206
|
+
addStyleExpression(ident);
|
|
207
|
+
addStyleExpression(ident, true);
|
|
208
|
+
}
|
|
209
|
+
return themeExpr;
|
|
210
|
+
}
|
|
211
|
+
return ident;
|
|
172
212
|
}
|
|
173
|
-
function addStyleExpression(expr, HOC =
|
|
174
|
-
Array.isArray(expr)
|
|
213
|
+
function addStyleExpression(expr, HOC = false) {
|
|
214
|
+
if (Array.isArray(expr)) {
|
|
215
|
+
;
|
|
216
|
+
(HOC ? hocStylesExpr : stylesExpr).elements.push(...expr);
|
|
217
|
+
} else {
|
|
218
|
+
;
|
|
219
|
+
(HOC ? hocStylesExpr : stylesExpr).elements.push(expr);
|
|
220
|
+
}
|
|
175
221
|
}
|
|
176
222
|
function getThemedStyleExpression(styles) {
|
|
177
223
|
const themedStylesAst = (0, import_literalToAst.literalToAst)(styles);
|
|
178
|
-
|
|
224
|
+
themedStylesAst.properties.forEach(_ => {
|
|
179
225
|
const prop = _;
|
|
180
226
|
if (prop.value.type === "StringLiteral") {
|
|
181
|
-
const propVal = prop.value.value.slice(1)
|
|
182
|
-
|
|
227
|
+
const propVal = prop.value.value.slice(1);
|
|
228
|
+
const isComputed = !t.isValidIdentifier(propVal);
|
|
183
229
|
prop.value = t.callExpression(t.memberExpression(t.memberExpression(t.identifier("theme"), isComputed ? t.stringLiteral(propVal) : t.identifier(propVal), isComputed), t.identifier("get")), []);
|
|
184
230
|
}
|
|
185
|
-
})
|
|
231
|
+
});
|
|
232
|
+
return themedStylesAst;
|
|
186
233
|
}
|
|
187
|
-
let hasDynamicStyle =
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
234
|
+
let hasDynamicStyle = false;
|
|
235
|
+
let hasMediaKeys = false;
|
|
236
|
+
for (const attr of props.attrs) {
|
|
237
|
+
switch (attr.type) {
|
|
238
|
+
case "style":
|
|
239
|
+
{
|
|
240
|
+
let styleExpr = getStyleExpression(attr.value);
|
|
241
|
+
addStyleExpression(styleExpr);
|
|
242
|
+
addStyleExpression(styleExpr, true);
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
case "ternary":
|
|
246
|
+
{
|
|
247
|
+
const {
|
|
198
248
|
consequent,
|
|
199
249
|
alternate
|
|
200
|
-
} = attr.value
|
|
201
|
-
consExpr = getStyleExpression(consequent)
|
|
202
|
-
altExpr = getStyleExpression(alternate);
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
250
|
+
} = attr.value;
|
|
251
|
+
const consExpr = getStyleExpression(consequent, true);
|
|
252
|
+
const altExpr = getStyleExpression(alternate, true);
|
|
253
|
+
if (attr.value.inlineMediaQuery) {
|
|
254
|
+
hasMediaKeys = true;
|
|
255
|
+
}
|
|
256
|
+
expressions.push(attr.value.test);
|
|
257
|
+
addStyleExpression(t.conditionalExpression(t.identifier(`_expressions[${expressions.length - 1}]`), consExpr || t.nullLiteral(), altExpr || t.nullLiteral()), true);
|
|
258
|
+
const styleExpr = t.conditionalExpression(attr.value.test, consExpr || t.nullLiteral(), altExpr || t.nullLiteral());
|
|
259
|
+
addStyleExpression(styleExpr);
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
case "attr":
|
|
263
|
+
{
|
|
264
|
+
if (t.isJSXSpreadAttribute(attr.value)) {
|
|
265
|
+
if ((0, import_extractHelpers.isSimpleSpread)(attr.value)) {
|
|
266
|
+
stylesExpr.elements.push(t.memberExpression(attr.value.argument, t.identifier("style")));
|
|
267
|
+
hocStylesExpr.elements.push(t.memberExpression(attr.value.argument, t.identifier("style")));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
finalAttrs.push(attr.value);
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
213
274
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
275
|
+
props.node.attributes = finalAttrs;
|
|
276
|
+
if (themeKeysUsed.size || hocStylesExpr.elements.length > 1 || hasDynamicStyle) {
|
|
277
|
+
if (!hasImportedViewWrapper) {
|
|
278
|
+
root.unshiftContainer("body", importWithStyle);
|
|
279
|
+
hasImportedViewWrapper = true;
|
|
280
|
+
}
|
|
281
|
+
const name = props.flatNodeName || props.node.name["name"];
|
|
282
|
+
const wrapperName = `_${name.replace(/^_+/, "")}Styled${wrapperCount++}`;
|
|
283
|
+
const WrapperIdentifier = t.identifier(wrapperName);
|
|
284
|
+
const WrapperJSXIdentifier = t.jsxIdentifier(wrapperName);
|
|
285
|
+
const hasThemeKeysFlag = themeKeysUsed.size > 0;
|
|
220
286
|
root.pushContainer("body", t.variableDeclaration("const", [t.variableDeclarator(WrapperIdentifier, t.callExpression(t.identifier("_withStableStyle"), [t.identifier(name), t.arrowFunctionExpression([t.identifier("theme"), t.identifier("_expressions")],
|
|
221
287
|
// return styles directly - no useMemo, theme changes must trigger style recalc
|
|
222
|
-
t.arrayExpression([...hocStylesExpr.elements]))
|
|
223
|
-
|
|
288
|
+
t.arrayExpression([...hocStylesExpr.elements])), t.booleanLiteral(hasThemeKeysFlag), t.booleanLiteral(hasMediaKeys)]))]));
|
|
289
|
+
props.node.name = WrapperJSXIdentifier;
|
|
290
|
+
props.jsxPath.node.openingElement.name = WrapperJSXIdentifier;
|
|
291
|
+
if (props.jsxPath.node.closingElement) {
|
|
292
|
+
props.jsxPath.node.closingElement.name = t.jsxIdentifier(wrapperName);
|
|
293
|
+
}
|
|
294
|
+
if (expressions.length) {
|
|
295
|
+
const safeExpressions = expressions.map(expr => t.isStringLiteral(expr) ? expr : t.unaryExpression("!", t.unaryExpression("!", expr)));
|
|
296
|
+
props.node.attributes.push(t.jsxAttribute(t.jsxIdentifier("_expressions"), t.jsxExpressionContainer(t.arrayExpression(safeExpressions))));
|
|
297
|
+
}
|
|
298
|
+
} else {
|
|
299
|
+
props.node.attributes.push(t.jsxAttribute(t.jsxIdentifier("style"), t.jsxExpressionContainer(stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr)));
|
|
300
|
+
}
|
|
224
301
|
}
|
|
225
302
|
});
|
|
226
303
|
} catch (err) {
|
|
227
304
|
if (err instanceof Error) {
|
|
228
305
|
let message = `${shouldPrintDebug === "verbose" ? err : err.message}`;
|
|
229
|
-
message.includes("Unexpected return value from visitor method")
|
|
306
|
+
if (message.includes("Unexpected return value from visitor method")) {
|
|
307
|
+
message = "Unexpected return value from visitor method";
|
|
308
|
+
}
|
|
309
|
+
console.warn("Error in GUI parse, skipping", message, err.stack);
|
|
230
310
|
return;
|
|
231
311
|
}
|
|
232
312
|
}
|
|
233
313
|
if (!Object.keys(sheetStyles).length) {
|
|
234
|
-
|
|
314
|
+
if (shouldPrintDebug) {
|
|
315
|
+
console.info("END no styles");
|
|
316
|
+
}
|
|
317
|
+
if (res) printLog(res);
|
|
235
318
|
return;
|
|
236
319
|
}
|
|
237
|
-
const sheetObject = (0, import_literalToAst.literalToAst)(sheetStyles)
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
sheetOuter.declarations[0].init.arguments[0] = sheetObject
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
320
|
+
const sheetObject = (0, import_literalToAst.literalToAst)(sheetStyles);
|
|
321
|
+
const sheetOuter = (0, import_template.default)("const SHEET = __ReactNativeStyleSheet.create(null)")({
|
|
322
|
+
SHEET: sheetIdentifier.name
|
|
323
|
+
});
|
|
324
|
+
sheetOuter.declarations[0].init.arguments[0] = sheetObject;
|
|
325
|
+
root.unshiftContainer("body", sheetOuter);
|
|
326
|
+
root.unshiftContainer("body", importStyleSheet());
|
|
327
|
+
if (shouldPrintDebug) {
|
|
328
|
+
console.info("\n -------- output code ------- \n");
|
|
329
|
+
console.info((0, import_generator.default)(root.parent).code.split("\n").filter(x => !x.startsWith("//")).join("\n"));
|
|
330
|
+
}
|
|
331
|
+
if (res) printLog(res);
|
|
246
332
|
}
|
|
247
333
|
}
|
|
248
334
|
}
|
|
249
335
|
};
|
|
250
336
|
}
|
|
251
337
|
function assertValidTag(node) {
|
|
252
|
-
node.attributes.find(x => x.type === "JSXAttribute" && x.name.name === "style")
|
|
338
|
+
if (node.attributes.find(x => x.type === "JSXAttribute" && x.name.name === "style")) {
|
|
339
|
+
if (process.env.DEBUG?.startsWith("@hanzo/gui")) {
|
|
340
|
+
console.warn("\u26A0\uFE0F Cannot pass style attribute to extracted style");
|
|
341
|
+
}
|
|
342
|
+
}
|
|
253
343
|
}
|
|
254
344
|
function splitThemeStyles(style) {
|
|
255
|
-
const themed = {}
|
|
256
|
-
|
|
257
|
-
let noTheme =
|
|
345
|
+
const themed = {};
|
|
346
|
+
const plain = {};
|
|
347
|
+
let noTheme = true;
|
|
258
348
|
for (const key in style) {
|
|
259
349
|
const val = style[key];
|
|
260
|
-
val && val[0] === "$"
|
|
350
|
+
if (val && val[0] === "$") {
|
|
351
|
+
themed[key] = val;
|
|
352
|
+
noTheme = false;
|
|
353
|
+
} else {
|
|
354
|
+
plain[key] = val;
|
|
355
|
+
}
|
|
261
356
|
}
|
|
262
357
|
return {
|
|
263
358
|
themed: noTheme ? null : themed,
|
|
@@ -3,20 +3,22 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
5
|
var __export = (target, all) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
14
|
get: () => from[key],
|
|
14
15
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
16
|
});
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
18
20
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
19
|
-
value:
|
|
21
|
+
value: true
|
|
20
22
|
}), mod);
|
|
21
23
|
var findTopmostFunction_exports = {};
|
|
22
24
|
__export(findTopmostFunction_exports, {
|
|
@@ -26,9 +28,16 @@ module.exports = __toCommonJS(findTopmostFunction_exports);
|
|
|
26
28
|
function findTopmostFunction(jsxPath) {
|
|
27
29
|
const isFunction = path => path.isArrowFunctionExpression() || path.isFunctionDeclaration() || path.isFunctionExpression();
|
|
28
30
|
let compFn = jsxPath.findParent(isFunction);
|
|
29
|
-
|
|
31
|
+
while (compFn) {
|
|
30
32
|
const parent = compFn.findParent(isFunction);
|
|
31
|
-
if (parent)
|
|
33
|
+
if (parent) {
|
|
34
|
+
compFn = parent;
|
|
35
|
+
} else {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (!compFn) {
|
|
40
|
+
return null;
|
|
32
41
|
}
|
|
33
|
-
return compFn
|
|
42
|
+
return compFn;
|
|
34
43
|
}
|
|
@@ -2,33 +2,35 @@ var __create = Object.create;
|
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf
|
|
6
|
-
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __export = (target, all) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
15
16
|
get: () => from[key],
|
|
16
17
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
18
|
});
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
20
22
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
28
|
+
value: mod,
|
|
29
|
+
enumerable: true
|
|
30
|
+
}) : target, mod));
|
|
31
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
32
|
+
value: true
|
|
33
|
+
}), mod);
|
|
32
34
|
var generatedUid_exports = {};
|
|
33
35
|
__export(generatedUid_exports, {
|
|
34
36
|
generateUid: () => generateUid
|
|
@@ -36,12 +38,21 @@ __export(generatedUid_exports, {
|
|
|
36
38
|
module.exports = __toCommonJS(generatedUid_exports);
|
|
37
39
|
var t = __toESM(require("@babel/types"));
|
|
38
40
|
function generateUid(scope, name) {
|
|
39
|
-
if (typeof scope
|
|
40
|
-
if (!(typeof name
|
|
41
|
+
if (!(typeof scope === "object")) throw "generateUid expects a scope object as its first parameter";
|
|
42
|
+
if (!(typeof name === "string" && name !== "")) throw "generateUid expects a valid name as its second parameter";
|
|
41
43
|
name = t.toIdentifier(name).replace(/^_+/, "").replace(/[0-9]+$/g, "");
|
|
42
|
-
let uid
|
|
43
|
-
|
|
44
|
-
do
|
|
44
|
+
let uid;
|
|
45
|
+
let i = 0;
|
|
46
|
+
do {
|
|
47
|
+
if (i > 1) {
|
|
48
|
+
uid = name + i;
|
|
49
|
+
} else {
|
|
50
|
+
uid = name;
|
|
51
|
+
}
|
|
52
|
+
i++;
|
|
53
|
+
} while (scope.hasLabel(uid) || scope.hasBinding(uid) || scope.hasGlobal(uid) || scope.hasReference(uid));
|
|
45
54
|
const program = scope.getProgramParent();
|
|
46
|
-
|
|
55
|
+
program.references[uid] = true;
|
|
56
|
+
program.uids[uid] = true;
|
|
57
|
+
return uid;
|
|
47
58
|
}
|