@tamagui/static 1.14.8 → 1.15.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/extractor/bundleConfig.js +343 -0
- package/dist/cjs/extractor/bundleConfig.js.map +7 -0
- package/dist/cjs/extractor/createExtractor.js.map +2 -2
- package/dist/cjs/extractor/generateTamaguiConfig.js +83 -0
- package/dist/cjs/extractor/generateTamaguiConfig.js.map +7 -0
- package/dist/cjs/extractor/loadTamagui.js +76 -292
- package/dist/cjs/extractor/loadTamagui.js.map +3 -3
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/extractor/bundleConfig.js +307 -0
- package/dist/esm/extractor/bundleConfig.js.map +7 -0
- package/dist/esm/extractor/bundleConfig.mjs +307 -0
- package/dist/esm/extractor/bundleConfig.mjs.map +7 -0
- package/dist/esm/extractor/createExtractor.js.map +2 -2
- package/dist/esm/extractor/createExtractor.mjs.map +2 -2
- package/dist/esm/extractor/generateTamaguiConfig.js +49 -0
- package/dist/esm/extractor/generateTamaguiConfig.js.map +7 -0
- package/dist/esm/extractor/generateTamaguiConfig.mjs +49 -0
- package/dist/esm/extractor/generateTamaguiConfig.mjs.map +7 -0
- package/dist/esm/extractor/loadTamagui.js +76 -290
- package/dist/esm/extractor/loadTamagui.js.map +2 -2
- package/dist/esm/extractor/loadTamagui.mjs +76 -290
- package/dist/esm/extractor/loadTamagui.mjs.map +2 -2
- package/package.json +16 -16
- package/src/extractor/bundleConfig.ts +389 -0
- package/src/extractor/createExtractor.ts +3 -3
- package/src/extractor/generateTamaguiConfig.ts +65 -0
- package/src/extractor/loadTamagui.ts +81 -370
- package/src/types.ts +2 -3
- package/types/extractor/bundleConfig.d.ts +35 -0
- package/types/extractor/bundleConfig.d.ts.map +1 -0
- package/types/extractor/createExtractor.d.ts +2 -2
- package/types/extractor/createExtractor.d.ts.map +1 -1
- package/types/extractor/extractHelpers.d.ts +2 -2
- package/types/extractor/generateTamaguiConfig.d.ts +3 -0
- package/types/extractor/generateTamaguiConfig.d.ts.map +1 -0
- package/types/extractor/loadTamagui.d.ts +6 -21
- package/types/extractor/loadTamagui.d.ts.map +1 -1
- package/types/types.d.ts +1 -1
- package/types/types.d.ts.map +1 -1
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var bundleConfig_exports = {};
|
|
30
|
+
__export(bundleConfig_exports, {
|
|
31
|
+
bundleConfig: () => bundleConfig,
|
|
32
|
+
esbuildOptions: () => esbuildOptions,
|
|
33
|
+
loadComponents: () => loadComponents
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(bundleConfig_exports);
|
|
36
|
+
var import_fs = require("fs");
|
|
37
|
+
var import_path = __toESM(require("path"));
|
|
38
|
+
var import_generator = __toESM(require("@babel/generator"));
|
|
39
|
+
var import_traverse = __toESM(require("@babel/traverse"));
|
|
40
|
+
var t = __toESM(require("@babel/types"));
|
|
41
|
+
var import_cli_color = require("@tamagui/cli-color");
|
|
42
|
+
var import_esbuild = __toESM(require("esbuild"));
|
|
43
|
+
var import_fs_extra = require("fs-extra");
|
|
44
|
+
var import_babelParse = require("./babelParse.js");
|
|
45
|
+
var import_bundle = require("./bundle.js");
|
|
46
|
+
let loggedOutputInfo = false;
|
|
47
|
+
const external = [
|
|
48
|
+
"@tamagui/core",
|
|
49
|
+
"@tamagui/web",
|
|
50
|
+
"@tamagui/core-node",
|
|
51
|
+
"react",
|
|
52
|
+
"react-dom",
|
|
53
|
+
"react-native-svg"
|
|
54
|
+
];
|
|
55
|
+
const esbuildOptions = {
|
|
56
|
+
loader: "tsx",
|
|
57
|
+
target: "es2018",
|
|
58
|
+
format: "cjs",
|
|
59
|
+
jsx: "transform",
|
|
60
|
+
platform: "node"
|
|
61
|
+
};
|
|
62
|
+
async function bundleConfig(props) {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
const configEntry = props.config ? (0, import_path.join)(process.cwd(), props.config) : "";
|
|
65
|
+
const tmpDir = (0, import_path.join)(process.cwd(), ".tamagui");
|
|
66
|
+
const configOutPath = (0, import_path.join)(tmpDir, `tamagui.config.cjs`);
|
|
67
|
+
const baseComponents = props.components.filter((x) => x !== "@tamagui/core");
|
|
68
|
+
const componentOutPaths = baseComponents.map(
|
|
69
|
+
(componentModule) => (0, import_path.join)(
|
|
70
|
+
tmpDir,
|
|
71
|
+
`${componentModule.split(import_path.sep).join("-").replace(/[^a-z0-9]+/gi, "")}-components.config.cjs`
|
|
72
|
+
)
|
|
73
|
+
);
|
|
74
|
+
if (process.env.NODE_ENV === "development" && ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui"))) {
|
|
75
|
+
console.log(`Building config entry`, configEntry);
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
await (0, import_fs_extra.ensureDir)(tmpDir);
|
|
79
|
+
} catch {
|
|
80
|
+
}
|
|
81
|
+
if (!loggedOutputInfo) {
|
|
82
|
+
loggedOutputInfo = true;
|
|
83
|
+
(0, import_cli_color.colorLog)(
|
|
84
|
+
import_cli_color.Color.FgYellow,
|
|
85
|
+
`
|
|
86
|
+
Tamagui built config and components:`
|
|
87
|
+
);
|
|
88
|
+
(0, import_cli_color.colorLog)(
|
|
89
|
+
import_cli_color.Color.Dim,
|
|
90
|
+
`
|
|
91
|
+
Config .${import_path.sep}${(0, import_path.relative)(process.cwd(), configOutPath)}
|
|
92
|
+
Components ${[
|
|
93
|
+
...componentOutPaths.map((p) => `.${import_path.sep}${(0, import_path.relative)(process.cwd(), p)}`)
|
|
94
|
+
].join("\n ")}
|
|
95
|
+
`
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
await Promise.all([
|
|
99
|
+
props.config ? (0, import_bundle.bundle)({
|
|
100
|
+
entryPoints: [configEntry],
|
|
101
|
+
external,
|
|
102
|
+
outfile: configOutPath
|
|
103
|
+
}) : null,
|
|
104
|
+
...baseComponents.map((componentModule, i) => {
|
|
105
|
+
return (0, import_bundle.bundle)({
|
|
106
|
+
entryPoints: [componentModule],
|
|
107
|
+
resolvePlatformSpecificEntries: true,
|
|
108
|
+
external,
|
|
109
|
+
outfile: componentOutPaths[i]
|
|
110
|
+
});
|
|
111
|
+
})
|
|
112
|
+
]);
|
|
113
|
+
delete require.cache[import_path.default.resolve(configOutPath)];
|
|
114
|
+
const out = require(configOutPath);
|
|
115
|
+
const config = out.default || out;
|
|
116
|
+
if (!config) {
|
|
117
|
+
throw new Error(`No config: ${config}`);
|
|
118
|
+
}
|
|
119
|
+
let components = loadComponents({
|
|
120
|
+
...props,
|
|
121
|
+
components: componentOutPaths
|
|
122
|
+
});
|
|
123
|
+
if (!components) {
|
|
124
|
+
throw new Error(`No components found: ${componentOutPaths.join(", ")}`);
|
|
125
|
+
}
|
|
126
|
+
for (const component of components) {
|
|
127
|
+
component.moduleName = baseComponents[componentOutPaths.indexOf(component.moduleName)];
|
|
128
|
+
}
|
|
129
|
+
const coreComponents = loadComponents({
|
|
130
|
+
...props,
|
|
131
|
+
components: ["@tamagui/core-node"]
|
|
132
|
+
});
|
|
133
|
+
if (coreComponents) {
|
|
134
|
+
coreComponents[0].moduleName = "@tamagui/core";
|
|
135
|
+
components = [...components, ...coreComponents];
|
|
136
|
+
}
|
|
137
|
+
if (process.env.NODE_ENV === "development" && ((_b = process.env.DEBUG) == null ? void 0 : _b.startsWith("tamagui"))) {
|
|
138
|
+
console.log("Loaded components", components);
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
components,
|
|
142
|
+
nameToPaths: {},
|
|
143
|
+
tamaguiConfig: config
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function loadComponents(props) {
|
|
147
|
+
const componentsModules = props.components;
|
|
148
|
+
const key = componentsModules.join("");
|
|
149
|
+
if (cacheComponents[key]) {
|
|
150
|
+
return cacheComponents[key];
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const info = componentsModules.flatMap((name) => {
|
|
154
|
+
var _a;
|
|
155
|
+
const extension = (0, import_path.extname)(name);
|
|
156
|
+
const isLocal = Boolean(extension);
|
|
157
|
+
const isDynamic = isLocal && !props.config;
|
|
158
|
+
if (isDynamic && !process.env.TAMAGUI_ENABLE_DYNAMIC_LOAD) {
|
|
159
|
+
return [];
|
|
160
|
+
}
|
|
161
|
+
const fileContents = isDynamic ? (0, import_fs.readFileSync)(name, "utf-8") : "";
|
|
162
|
+
const loadModule = isDynamic ? (0, import_path.join)((0, import_path.dirname)(name), `.tamagui-dynamic-eval-${(0, import_path.basename)(name)}.tsx`) : name;
|
|
163
|
+
let writtenContents = fileContents;
|
|
164
|
+
let didBabel = false;
|
|
165
|
+
function attemptLoad({ forceExports = false } = {}) {
|
|
166
|
+
if (isDynamic) {
|
|
167
|
+
writtenContents = forceExports ? esbuildit(
|
|
168
|
+
transformAddExports((0, import_babelParse.babelParse)(esbuildit(fileContents, "modern")))
|
|
169
|
+
) : esbuildit(fileContents);
|
|
170
|
+
(0, import_fs_extra.writeFileSync)(loadModule, writtenContents);
|
|
171
|
+
}
|
|
172
|
+
if (process.env.DEBUG === "tamagui") {
|
|
173
|
+
console.log(`loadModule`, loadModule, require.resolve(loadModule));
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
moduleName: name,
|
|
177
|
+
nameToInfo: getComponentStaticConfigByName(
|
|
178
|
+
name,
|
|
179
|
+
interopDefaultExport(require(loadModule))
|
|
180
|
+
)
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const dispose = () => {
|
|
184
|
+
isDynamic && (0, import_fs_extra.removeSync)(loadModule);
|
|
185
|
+
};
|
|
186
|
+
try {
|
|
187
|
+
const res = attemptLoad({
|
|
188
|
+
forceExports: true
|
|
189
|
+
});
|
|
190
|
+
didBabel = true;
|
|
191
|
+
return res;
|
|
192
|
+
} catch (err) {
|
|
193
|
+
console.log("babel err", err, writtenContents);
|
|
194
|
+
writtenContents = fileContents;
|
|
195
|
+
if ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui")) {
|
|
196
|
+
console.log(`Error parsing babel likely`, err);
|
|
197
|
+
}
|
|
198
|
+
} finally {
|
|
199
|
+
dispose();
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
return attemptLoad({
|
|
203
|
+
forceExports: false
|
|
204
|
+
});
|
|
205
|
+
} catch (err) {
|
|
206
|
+
if (!process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD) {
|
|
207
|
+
console.log(`
|
|
208
|
+
|
|
209
|
+
Tamagui attempted but failed to dynamically load components in:
|
|
210
|
+
${name}
|
|
211
|
+
|
|
212
|
+
This will leave some styled() tags unoptimized.
|
|
213
|
+
Disable this file (or dynamic loading altogether):
|
|
214
|
+
|
|
215
|
+
disableExtractFoundComponents: ['${name}'] | true
|
|
216
|
+
|
|
217
|
+
Quiet this warning with environment variable:
|
|
218
|
+
|
|
219
|
+
TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1
|
|
220
|
+
|
|
221
|
+
`);
|
|
222
|
+
console.log(err);
|
|
223
|
+
console.log(
|
|
224
|
+
`At: ${loadModule}`,
|
|
225
|
+
`
|
|
226
|
+
didBabel: ${didBabel}`,
|
|
227
|
+
`
|
|
228
|
+
In:`,
|
|
229
|
+
writtenContents,
|
|
230
|
+
`
|
|
231
|
+
isDynamic: `,
|
|
232
|
+
isDynamic
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
return [];
|
|
236
|
+
} finally {
|
|
237
|
+
dispose();
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
cacheComponents[key] = info;
|
|
241
|
+
return info;
|
|
242
|
+
} catch (err) {
|
|
243
|
+
console.log(`Tamagui error bundling components`, err.message, err.stack);
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const esbuildit = (src, target) => {
|
|
248
|
+
return import_esbuild.default.transformSync(src, {
|
|
249
|
+
...esbuildOptions,
|
|
250
|
+
...target === "modern" && {
|
|
251
|
+
target: "es2022",
|
|
252
|
+
jsx: "transform",
|
|
253
|
+
loader: "tsx",
|
|
254
|
+
platform: "neutral",
|
|
255
|
+
format: "esm"
|
|
256
|
+
}
|
|
257
|
+
}).code;
|
|
258
|
+
};
|
|
259
|
+
function getComponentStaticConfigByName(name, exported) {
|
|
260
|
+
const components = {};
|
|
261
|
+
try {
|
|
262
|
+
if (!exported || typeof exported !== "object" || Array.isArray(exported)) {
|
|
263
|
+
throw new Error(`Invalid export from package ${name}: ${typeof exported}`);
|
|
264
|
+
}
|
|
265
|
+
for (const key in exported) {
|
|
266
|
+
const found = getTamaguiComponent(key, exported[key]);
|
|
267
|
+
if (found) {
|
|
268
|
+
const { Component, ...sc } = found.staticConfig;
|
|
269
|
+
components[key] = { staticConfig: sc };
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
} catch (err) {
|
|
273
|
+
if (process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD !== "1") {
|
|
274
|
+
console.error(
|
|
275
|
+
`Tamagui failed getting from ${name} (Disable error by setting environment variable TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1)`
|
|
276
|
+
);
|
|
277
|
+
console.error(err);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return components;
|
|
281
|
+
}
|
|
282
|
+
function getTamaguiComponent(name, Component) {
|
|
283
|
+
if (name[0].toUpperCase() !== name[0]) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const staticConfig = Component == null ? void 0 : Component.staticConfig;
|
|
287
|
+
if (staticConfig) {
|
|
288
|
+
return Component;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function interopDefaultExport(mod) {
|
|
292
|
+
return (mod == null ? void 0 : mod.default) ?? mod;
|
|
293
|
+
}
|
|
294
|
+
const cacheComponents = {};
|
|
295
|
+
function transformAddExports(ast) {
|
|
296
|
+
const usedNames = /* @__PURE__ */ new Set();
|
|
297
|
+
(0, import_traverse.default)(ast, {
|
|
298
|
+
ExportNamedDeclaration(nodePath) {
|
|
299
|
+
if (nodePath.node.specifiers) {
|
|
300
|
+
for (const spec of nodePath.node.specifiers) {
|
|
301
|
+
usedNames.add(
|
|
302
|
+
t.isIdentifier(spec.exported) ? spec.exported.name : spec.exported.value
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
(0, import_traverse.default)(ast, {
|
|
309
|
+
VariableDeclaration(nodePath) {
|
|
310
|
+
if (!t.isProgram(nodePath.parent))
|
|
311
|
+
return;
|
|
312
|
+
const decs = nodePath.node.declarations;
|
|
313
|
+
if (decs.length > 1)
|
|
314
|
+
return;
|
|
315
|
+
const [dec] = decs;
|
|
316
|
+
if (!t.isIdentifier(dec.id))
|
|
317
|
+
return;
|
|
318
|
+
if (!dec.init)
|
|
319
|
+
return;
|
|
320
|
+
if (usedNames.has(dec.id.name))
|
|
321
|
+
return;
|
|
322
|
+
usedNames.add(dec.id.name);
|
|
323
|
+
nodePath.replaceWith(
|
|
324
|
+
t.exportNamedDeclaration(t.variableDeclaration("let", [dec]), [
|
|
325
|
+
t.exportSpecifier(t.identifier(dec.id.name), t.identifier(dec.id.name))
|
|
326
|
+
])
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
return (0, import_generator.default)(ast, {
|
|
331
|
+
concise: false,
|
|
332
|
+
filename: "test.tsx",
|
|
333
|
+
retainLines: false,
|
|
334
|
+
sourceMaps: false
|
|
335
|
+
}).code;
|
|
336
|
+
}
|
|
337
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
338
|
+
0 && (module.exports = {
|
|
339
|
+
bundleConfig,
|
|
340
|
+
esbuildOptions,
|
|
341
|
+
loadComponents
|
|
342
|
+
});
|
|
343
|
+
//# sourceMappingURL=bundleConfig.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/extractor/bundleConfig.ts"],
|
|
4
|
+
"sourcesContent": ["import { readFileSync } from 'fs'\nimport path, { basename, dirname, extname, join, relative, sep } from 'path'\n\nimport generate from '@babel/generator'\nimport traverse from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { Color, colorLog } from '@tamagui/cli-color'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/web'\nimport esbuild from 'esbuild'\nimport { ensureDir, removeSync, writeFileSync } from 'fs-extra'\n\nimport { babelParse } from './babelParse.js'\nimport { bundle } from './bundle.js'\n\nlet loggedOutputInfo = false\n\ntype NameToPaths = {\n [key: string]: Set<string>\n}\n\nexport type LoadedComponents = {\n moduleName: string\n nameToInfo: Record<\n string,\n {\n staticConfig: StaticConfigParsed\n }\n >\n}\n\nexport type TamaguiProjectInfo = {\n components: LoadedComponents[]\n tamaguiConfig: TamaguiInternalConfig\n nameToPaths: NameToPaths\n}\n\nexport type Props = {\n components: string[]\n config?: string\n forceExports?: boolean\n}\n\nconst external = [\n '@tamagui/core',\n '@tamagui/web',\n '@tamagui/core-node',\n 'react',\n 'react-dom',\n 'react-native-svg',\n]\n\nexport const esbuildOptions = {\n loader: 'tsx',\n target: 'es2018',\n format: 'cjs',\n jsx: 'transform',\n platform: 'node',\n} as const\n\nexport async function bundleConfig(props: Props) {\n const configEntry = props.config ? join(process.cwd(), props.config) : ''\n const tmpDir = join(process.cwd(), '.tamagui')\n const configOutPath = join(tmpDir, `tamagui.config.cjs`)\n const baseComponents = props.components.filter((x) => x !== '@tamagui/core')\n const componentOutPaths = baseComponents.map((componentModule) =>\n join(\n tmpDir,\n `${componentModule\n .split(sep)\n .join('-')\n .replace(/[^a-z0-9]+/gi, '')}-components.config.cjs`\n )\n )\n\n if (\n process.env.NODE_ENV === 'development' &&\n process.env.DEBUG?.startsWith('tamagui')\n ) {\n console.log(`Building config entry`, configEntry)\n }\n\n // build them to node-compat versions\n try {\n await ensureDir(tmpDir)\n } catch {\n //\n }\n\n if (!loggedOutputInfo) {\n loggedOutputInfo = true\n colorLog(\n Color.FgYellow,\n `\n Tamagui built config and components:`\n )\n colorLog(\n Color.Dim,\n `\n Config .${sep}${relative(process.cwd(), configOutPath)}\n Components ${[\n ...componentOutPaths.map((p) => `.${sep}${relative(process.cwd(), p)}`),\n ].join('\\n ')}\n `\n )\n }\n\n await Promise.all([\n props.config\n ? bundle({\n entryPoints: [configEntry],\n external,\n outfile: configOutPath,\n })\n : null,\n ...baseComponents.map((componentModule, i) => {\n return bundle({\n entryPoints: [componentModule],\n resolvePlatformSpecificEntries: true,\n external,\n outfile: componentOutPaths[i],\n })\n }),\n ])\n\n // get around node.js's module cache to get the new config...\n delete require.cache[path.resolve(configOutPath)]\n const out = require(configOutPath)\n const config = out.default || out\n if (!config) {\n throw new Error(`No config: ${config}`)\n }\n\n let components = loadComponents({\n ...props,\n components: componentOutPaths,\n })\n\n if (!components) {\n throw new Error(`No components found: ${componentOutPaths.join(', ')}`)\n }\n\n // map from built back to original module names\n for (const component of components) {\n component.moduleName = baseComponents[componentOutPaths.indexOf(component.moduleName)]\n\n // if (!component.moduleName) {\n // throw new Error(`Tamagui internal err`)\n // }\n }\n\n // always load core so we can optimize if directly importing\n const coreComponents = loadComponents({\n ...props,\n components: ['@tamagui/core-node'],\n })\n if (coreComponents) {\n coreComponents[0].moduleName = '@tamagui/core'\n components = [...components, ...coreComponents]\n }\n\n if (\n process.env.NODE_ENV === 'development' &&\n process.env.DEBUG?.startsWith('tamagui')\n ) {\n console.log('Loaded components', components)\n }\n return {\n components,\n nameToPaths: {},\n tamaguiConfig: config,\n }\n}\n\nexport function loadComponents(props: Props): null | LoadedComponents[] {\n const componentsModules = props.components\n const key = componentsModules.join('')\n if (cacheComponents[key]) {\n return cacheComponents[key]\n }\n try {\n const info: LoadedComponents[] = componentsModules.flatMap((name) => {\n const extension = extname(name)\n const isLocal = Boolean(extension)\n // during props.config pass we are passing in pre-bundled stuff\n const isDynamic = isLocal && !props.config\n\n if (isDynamic && !process.env.TAMAGUI_ENABLE_DYNAMIC_LOAD) {\n return []\n }\n\n const fileContents = isDynamic ? readFileSync(name, 'utf-8') : ''\n const loadModule = isDynamic\n ? join(dirname(name), `.tamagui-dynamic-eval-${basename(name)}.tsx`)\n : name\n let writtenContents = fileContents\n let didBabel = false\n\n function attemptLoad({ forceExports = false } = {}) {\n // need to write to tsx to enable reading it properly (:/ esbuild-register)\n if (isDynamic) {\n writtenContents = forceExports\n ? esbuildit(\n transformAddExports(babelParse(esbuildit(fileContents, 'modern')))\n )\n : esbuildit(fileContents)\n\n writeFileSync(loadModule, writtenContents)\n }\n\n if (process.env.DEBUG === 'tamagui') {\n console.log(`loadModule`, loadModule, require.resolve(loadModule))\n }\n\n return {\n moduleName: name,\n nameToInfo: getComponentStaticConfigByName(\n name,\n interopDefaultExport(require(loadModule))\n ),\n }\n }\n\n const dispose = () => {\n isDynamic && removeSync(loadModule)\n }\n\n try {\n const res = attemptLoad({\n forceExports: true,\n })\n didBabel = true\n return res\n } catch (err) {\n console.log('babel err', err, writtenContents)\n // ok\n writtenContents = fileContents\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Error parsing babel likely`, err)\n }\n } finally {\n dispose()\n }\n\n try {\n return attemptLoad({\n forceExports: false,\n })\n } catch (err) {\n if (!process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD) {\n console.log(`\n\nTamagui attempted but failed to dynamically load components in:\n ${name}\n\nThis will leave some styled() tags unoptimized.\nDisable this file (or dynamic loading altogether):\n\n disableExtractFoundComponents: ['${name}'] | true\n\nQuiet this warning with environment variable:\n \n TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1\n\n`)\n console.log(err)\n console.log(\n `At: ${loadModule}`,\n `\\ndidBabel: ${didBabel}`,\n `\\nIn:`,\n writtenContents,\n `\\nisDynamic: `,\n isDynamic\n )\n }\n return []\n } finally {\n dispose()\n }\n })\n cacheComponents[key] = info\n return info\n } catch (err: any) {\n console.log(`Tamagui error bundling components`, err.message, err.stack)\n return null\n }\n}\n\nconst esbuildit = (src: string, target?: 'modern') => {\n return esbuild.transformSync(src, {\n ...esbuildOptions,\n ...(target === 'modern' && {\n target: 'es2022',\n jsx: 'transform',\n loader: 'tsx',\n platform: 'neutral',\n format: 'esm',\n }),\n }).code\n}\n\nfunction getComponentStaticConfigByName(name: string, exported: any) {\n const components: Record<string, { staticConfig: StaticConfigParsed }> = {}\n try {\n if (!exported || typeof exported !== 'object' || Array.isArray(exported)) {\n throw new Error(`Invalid export from package ${name}: ${typeof exported}`)\n }\n for (const key in exported) {\n const found = getTamaguiComponent(key, exported[key])\n if (found) {\n // remove non-stringifyable\n const { Component, ...sc } = found.staticConfig\n components[key] = { staticConfig: sc }\n }\n }\n } catch (err) {\n if (process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD !== '1') {\n console.error(\n `Tamagui failed getting from ${name} (Disable error by setting environment variable TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1)`\n )\n console.error(err)\n }\n }\n return components\n}\n\nfunction getTamaguiComponent(\n name: string,\n Component: any\n): undefined | { staticConfig: StaticConfigParsed } {\n if (name[0].toUpperCase() !== name[0]) {\n return\n }\n const staticConfig = Component?.staticConfig as StaticConfigParsed | undefined\n if (staticConfig) {\n return Component\n }\n}\n\nfunction interopDefaultExport(mod: any) {\n return mod?.default ?? mod\n}\n\nconst cacheComponents: Record<string, LoadedComponents[]> = {}\n\nfunction transformAddExports(ast: t.File) {\n const usedNames = new Set<string>()\n\n // avoid clobbering\n // @ts-ignore\n traverse(ast, {\n ExportNamedDeclaration(nodePath) {\n if (nodePath.node.specifiers) {\n for (const spec of nodePath.node.specifiers) {\n usedNames.add(\n t.isIdentifier(spec.exported) ? spec.exported.name : spec.exported.value\n )\n }\n }\n },\n })\n\n // @ts-ignore\n traverse(ast, {\n VariableDeclaration(nodePath) {\n // top level only\n if (!t.isProgram(nodePath.parent)) return\n const decs = nodePath.node.declarations\n if (decs.length > 1) return\n const [dec] = decs\n if (!t.isIdentifier(dec.id)) return\n if (!dec.init) return\n if (usedNames.has(dec.id.name)) return\n usedNames.add(dec.id.name)\n nodePath.replaceWith(\n t.exportNamedDeclaration(t.variableDeclaration('let', [dec]), [\n t.exportSpecifier(t.identifier(dec.id.name), t.identifier(dec.id.name)),\n ])\n )\n },\n })\n\n // @ts-ignore\n return generate(ast as any, {\n concise: false,\n filename: 'test.tsx',\n retainLines: false,\n sourceMaps: false,\n }).code\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA6B;AAC7B,kBAAsE;AAEtE,uBAAqB;AACrB,sBAAqB;AACrB,QAAmB;AACnB,uBAAgC;AAEhC,qBAAoB;AACpB,sBAAqD;AAErD,wBAA2B;AAC3B,oBAAuB;AAEvB,IAAI,mBAAmB;AA4BvB,MAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,iBAAiB;AAAA,EAC5B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AACZ;AAEA,eAAsB,aAAa,OAAc;AA3DjD;AA4DE,QAAM,cAAc,MAAM,aAAS,kBAAK,QAAQ,IAAI,GAAG,MAAM,MAAM,IAAI;AACvE,QAAM,aAAS,kBAAK,QAAQ,IAAI,GAAG,UAAU;AAC7C,QAAM,oBAAgB,kBAAK,QAAQ,oBAAoB;AACvD,QAAM,iBAAiB,MAAM,WAAW,OAAO,CAAC,MAAM,MAAM,eAAe;AAC3E,QAAM,oBAAoB,eAAe;AAAA,IAAI,CAAC,wBAC5C;AAAA,MACE;AAAA,MACA,GAAG,gBACA,MAAM,eAAG,EACT,KAAK,GAAG,EACR,QAAQ,gBAAgB,EAAE;AAAA,IAC/B;AAAA,EACF;AAEA,MACE,QAAQ,IAAI,aAAa,mBACzB,aAAQ,IAAI,UAAZ,mBAAmB,WAAW,aAC9B;AACA,YAAQ,IAAI,yBAAyB,WAAW;AAAA,EAClD;AAGA,MAAI;AACF,cAAM,2BAAU,MAAM;AAAA,EACxB,QAAE;AAAA,EAEF;AAEA,MAAI,CAAC,kBAAkB;AACrB,uBAAmB;AACnB;AAAA,MACE,uBAAM;AAAA,MACN;AAAA;AAAA,IAEF;AACA;AAAA,MACE,uBAAM;AAAA,MACN;AAAA,sBACgB,sBAAM,sBAAS,QAAQ,IAAI,GAAG,aAAa;AAAA,qBAC5C;AAAA,QACX,GAAG,kBAAkB,IAAI,CAAC,MAAM,IAAI,sBAAM,sBAAS,QAAQ,IAAI,GAAG,CAAC,GAAG;AAAA,MACxE,EAAE,KAAK,iBAAiB;AAAA;AAAA,IAE5B;AAAA,EACF;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,MAAM,aACF,sBAAO;AAAA,MACL,aAAa,CAAC,WAAW;AAAA,MACzB;AAAA,MACA,SAAS;AAAA,IACX,CAAC,IACD;AAAA,IACJ,GAAG,eAAe,IAAI,CAAC,iBAAiB,MAAM;AAC5C,iBAAO,sBAAO;AAAA,QACZ,aAAa,CAAC,eAAe;AAAA,QAC7B,gCAAgC;AAAA,QAChC;AAAA,QACA,SAAS,kBAAkB,CAAC;AAAA,MAC9B,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAGD,SAAO,QAAQ,MAAM,YAAAA,QAAK,QAAQ,aAAa,CAAC;AAChD,QAAM,MAAM,QAAQ,aAAa;AACjC,QAAM,SAAS,IAAI,WAAW;AAC9B,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,cAAc,QAAQ;AAAA,EACxC;AAEA,MAAI,aAAa,eAAe;AAAA,IAC9B,GAAG;AAAA,IACH,YAAY;AAAA,EACd,CAAC;AAED,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,wBAAwB,kBAAkB,KAAK,IAAI,GAAG;AAAA,EACxE;AAGA,aAAW,aAAa,YAAY;AAClC,cAAU,aAAa,eAAe,kBAAkB,QAAQ,UAAU,UAAU,CAAC;AAAA,EAKvF;AAGA,QAAM,iBAAiB,eAAe;AAAA,IACpC,GAAG;AAAA,IACH,YAAY,CAAC,oBAAoB;AAAA,EACnC,CAAC;AACD,MAAI,gBAAgB;AAClB,mBAAe,CAAC,EAAE,aAAa;AAC/B,iBAAa,CAAC,GAAG,YAAY,GAAG,cAAc;AAAA,EAChD;AAEA,MACE,QAAQ,IAAI,aAAa,mBACzB,aAAQ,IAAI,UAAZ,mBAAmB,WAAW,aAC9B;AACA,YAAQ,IAAI,qBAAqB,UAAU;AAAA,EAC7C;AACA,SAAO;AAAA,IACL;AAAA,IACA,aAAa,CAAC;AAAA,IACd,eAAe;AAAA,EACjB;AACF;AAEO,SAAS,eAAe,OAAyC;AACtE,QAAM,oBAAoB,MAAM;AAChC,QAAM,MAAM,kBAAkB,KAAK,EAAE;AACrC,MAAI,gBAAgB,GAAG,GAAG;AACxB,WAAO,gBAAgB,GAAG;AAAA,EAC5B;AACA,MAAI;AACF,UAAM,OAA2B,kBAAkB,QAAQ,CAAC,SAAS;AApLzE;AAqLM,YAAM,gBAAY,qBAAQ,IAAI;AAC9B,YAAM,UAAU,QAAQ,SAAS;AAEjC,YAAM,YAAY,WAAW,CAAC,MAAM;AAEpC,UAAI,aAAa,CAAC,QAAQ,IAAI,6BAA6B;AACzD,eAAO,CAAC;AAAA,MACV;AAEA,YAAM,eAAe,gBAAY,wBAAa,MAAM,OAAO,IAAI;AAC/D,YAAM,aAAa,gBACf,sBAAK,qBAAQ,IAAI,GAAG,6BAAyB,sBAAS,IAAI,OAAO,IACjE;AACJ,UAAI,kBAAkB;AACtB,UAAI,WAAW;AAEf,eAAS,YAAY,EAAE,eAAe,MAAM,IAAI,CAAC,GAAG;AAElD,YAAI,WAAW;AACb,4BAAkB,eACd;AAAA,YACE,wBAAoB,8BAAW,UAAU,cAAc,QAAQ,CAAC,CAAC;AAAA,UACnE,IACA,UAAU,YAAY;AAE1B,6CAAc,YAAY,eAAe;AAAA,QAC3C;AAEA,YAAI,QAAQ,IAAI,UAAU,WAAW;AACnC,kBAAQ,IAAI,cAAc,YAAY,QAAQ,QAAQ,UAAU,CAAC;AAAA,QACnE;AAEA,eAAO;AAAA,UACL,YAAY;AAAA,UACZ,YAAY;AAAA,YACV;AAAA,YACA,qBAAqB,QAAQ,UAAU,CAAC;AAAA,UAC1C;AAAA,QACF;AAAA,MACF;AAEA,YAAM,UAAU,MAAM;AACpB,yBAAa,4BAAW,UAAU;AAAA,MACpC;AAEA,UAAI;AACF,cAAM,MAAM,YAAY;AAAA,UACtB,cAAc;AAAA,QAChB,CAAC;AACD,mBAAW;AACX,eAAO;AAAA,MACT,SAAS,KAAP;AACA,gBAAQ,IAAI,aAAa,KAAK,eAAe;AAE7C,0BAAkB;AAClB,aAAI,aAAQ,IAAI,UAAZ,mBAAmB,WAAW,YAAY;AAC5C,kBAAQ,IAAI,8BAA8B,GAAG;AAAA,QAC/C;AAAA,MACF,UAAE;AACA,gBAAQ;AAAA,MACV;AAEA,UAAI;AACF,eAAO,YAAY;AAAA,UACjB,cAAc;AAAA,QAChB,CAAC;AAAA,MACH,SAAS,KAAP;AACA,YAAI,CAAC,QAAQ,IAAI,mCAAmC;AAClD,kBAAQ,IAAI;AAAA;AAAA;AAAA,IAGlB;AAAA;AAAA;AAAA;AAAA;AAAA,qCAKiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAMpC;AACS,kBAAQ,IAAI,GAAG;AACf,kBAAQ;AAAA,YACN,OAAO;AAAA,YACP;AAAA,YAAe;AAAA,YACf;AAAA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,eAAO,CAAC;AAAA,MACV,UAAE;AACA,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AACD,oBAAgB,GAAG,IAAI;AACvB,WAAO;AAAA,EACT,SAAS,KAAP;AACA,YAAQ,IAAI,qCAAqC,IAAI,SAAS,IAAI,KAAK;AACvE,WAAO;AAAA,EACT;AACF;AAEA,MAAM,YAAY,CAAC,KAAa,WAAsB;AACpD,SAAO,eAAAC,QAAQ,cAAc,KAAK;AAAA,IAChC,GAAG;AAAA,IACH,GAAI,WAAW,YAAY;AAAA,MACzB,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF,CAAC,EAAE;AACL;AAEA,SAAS,+BAA+B,MAAc,UAAe;AACnE,QAAM,aAAmE,CAAC;AAC1E,MAAI;AACF,QAAI,CAAC,YAAY,OAAO,aAAa,YAAY,MAAM,QAAQ,QAAQ,GAAG;AACxE,YAAM,IAAI,MAAM,+BAA+B,SAAS,OAAO,UAAU;AAAA,IAC3E;AACA,eAAW,OAAO,UAAU;AAC1B,YAAM,QAAQ,oBAAoB,KAAK,SAAS,GAAG,CAAC;AACpD,UAAI,OAAO;AAET,cAAM,EAAE,WAAW,GAAG,GAAG,IAAI,MAAM;AACnC,mBAAW,GAAG,IAAI,EAAE,cAAc,GAAG;AAAA,MACvC;AAAA,IACF;AAAA,EACF,SAAS,KAAP;AACA,QAAI,QAAQ,IAAI,sCAAsC,KAAK;AACzD,cAAQ;AAAA,QACN,+BAA+B;AAAA,MACjC;AACA,cAAQ,MAAM,GAAG;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBACP,MACA,WACkD;AAClD,MAAI,KAAK,CAAC,EAAE,YAAY,MAAM,KAAK,CAAC,GAAG;AACrC;AAAA,EACF;AACA,QAAM,eAAe,uCAAW;AAChC,MAAI,cAAc;AAChB,WAAO;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,KAAU;AACtC,UAAO,2BAAK,YAAW;AACzB;AAEA,MAAM,kBAAsD,CAAC;AAE7D,SAAS,oBAAoB,KAAa;AACxC,QAAM,YAAY,oBAAI,IAAY;AAIlC,sBAAAC,SAAS,KAAK;AAAA,IACZ,uBAAuB,UAAU;AAC/B,UAAI,SAAS,KAAK,YAAY;AAC5B,mBAAW,QAAQ,SAAS,KAAK,YAAY;AAC3C,oBAAU;AAAA,YACR,EAAE,aAAa,KAAK,QAAQ,IAAI,KAAK,SAAS,OAAO,KAAK,SAAS;AAAA,UACrE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGD,sBAAAA,SAAS,KAAK;AAAA,IACZ,oBAAoB,UAAU;AAE5B,UAAI,CAAC,EAAE,UAAU,SAAS,MAAM;AAAG;AACnC,YAAM,OAAO,SAAS,KAAK;AAC3B,UAAI,KAAK,SAAS;AAAG;AACrB,YAAM,CAAC,GAAG,IAAI;AACd,UAAI,CAAC,EAAE,aAAa,IAAI,EAAE;AAAG;AAC7B,UAAI,CAAC,IAAI;AAAM;AACf,UAAI,UAAU,IAAI,IAAI,GAAG,IAAI;AAAG;AAChC,gBAAU,IAAI,IAAI,GAAG,IAAI;AACzB,eAAS;AAAA,QACP,EAAE,uBAAuB,EAAE,oBAAoB,OAAO,CAAC,GAAG,CAAC,GAAG;AAAA,UAC5D,EAAE,gBAAgB,EAAE,WAAW,IAAI,GAAG,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,CAAC;AAAA,QACxE,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAGD,aAAO,iBAAAC,SAAS,KAAY;AAAA,IAC1B,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,EACd,CAAC,EAAE;AACL;",
|
|
6
|
+
"names": ["path", "esbuild", "traverse", "generate"]
|
|
7
|
+
}
|