@tamagui/static 1.14.9 → 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.
Files changed (39) hide show
  1. package/dist/cjs/extractor/bundleConfig.js +343 -0
  2. package/dist/cjs/extractor/bundleConfig.js.map +7 -0
  3. package/dist/cjs/extractor/createExtractor.js.map +2 -2
  4. package/dist/cjs/extractor/generateTamaguiConfig.js +83 -0
  5. package/dist/cjs/extractor/generateTamaguiConfig.js.map +7 -0
  6. package/dist/cjs/extractor/loadTamagui.js +76 -292
  7. package/dist/cjs/extractor/loadTamagui.js.map +3 -3
  8. package/dist/cjs/types.js.map +1 -1
  9. package/dist/esm/extractor/bundleConfig.js +307 -0
  10. package/dist/esm/extractor/bundleConfig.js.map +7 -0
  11. package/dist/esm/extractor/bundleConfig.mjs +307 -0
  12. package/dist/esm/extractor/bundleConfig.mjs.map +7 -0
  13. package/dist/esm/extractor/createExtractor.js.map +2 -2
  14. package/dist/esm/extractor/createExtractor.mjs.map +2 -2
  15. package/dist/esm/extractor/generateTamaguiConfig.js +49 -0
  16. package/dist/esm/extractor/generateTamaguiConfig.js.map +7 -0
  17. package/dist/esm/extractor/generateTamaguiConfig.mjs +49 -0
  18. package/dist/esm/extractor/generateTamaguiConfig.mjs.map +7 -0
  19. package/dist/esm/extractor/loadTamagui.js +76 -290
  20. package/dist/esm/extractor/loadTamagui.js.map +2 -2
  21. package/dist/esm/extractor/loadTamagui.mjs +76 -290
  22. package/dist/esm/extractor/loadTamagui.mjs.map +2 -2
  23. package/package.json +16 -16
  24. package/src/extractor/bundleConfig.ts +389 -0
  25. package/src/extractor/createExtractor.ts +3 -3
  26. package/src/extractor/generateTamaguiConfig.ts +65 -0
  27. package/src/extractor/loadTamagui.ts +81 -370
  28. package/src/types.ts +2 -3
  29. package/types/extractor/bundleConfig.d.ts +35 -0
  30. package/types/extractor/bundleConfig.d.ts.map +1 -0
  31. package/types/extractor/createExtractor.d.ts +2 -2
  32. package/types/extractor/createExtractor.d.ts.map +1 -1
  33. package/types/extractor/extractHelpers.d.ts +2 -2
  34. package/types/extractor/generateTamaguiConfig.d.ts +3 -0
  35. package/types/extractor/generateTamaguiConfig.d.ts.map +1 -0
  36. package/types/extractor/loadTamagui.d.ts +6 -21
  37. package/types/extractor/loadTamagui.d.ts.map +1 -1
  38. package/types/types.d.ts +1 -1
  39. package/types/types.d.ts.map +1 -1
@@ -1,20 +1,19 @@
1
- import { readFileSync } from "fs";
2
- import { basename, dirname, extname, join, relative, resolve, sep } from "path";
3
- import generate from "@babel/generator";
4
- import traverse from "@babel/traverse";
5
- import * as t from "@babel/types";
6
- import { Color, colorLog } from "@tamagui/cli-color";
1
+ import { basename, dirname, extname, join, resolve } from "path";
7
2
  import { getDefaultTamaguiConfig } from "@tamagui/config-default-node";
8
3
  import { createTamagui } from "@tamagui/core-node";
9
4
  import esbuild from "esbuild";
10
- import { ensureDir, existsSync, removeSync, writeFileSync } from "fs-extra";
5
+ import fs, { existsSync, pathExists, readJSON } from "fs-extra";
11
6
  import { SHOULD_DEBUG } from "../constants.js";
12
7
  import { getNameToPaths, registerRequire, unregisterRequire } from "../require.js";
13
- import { babelParse } from "./babelParse.js";
14
- import { bundle } from "./bundle.js";
8
+ import {
9
+ TamaguiProjectInfo,
10
+ bundleConfig,
11
+ esbuildOptions,
12
+ loadComponents
13
+ } from "./bundleConfig.js";
14
+ import { generateTamaguiConfig } from "./generateTamaguiConfig.js";
15
15
  const cache = {};
16
16
  async function loadTamagui(props) {
17
- var _a, _b;
18
17
  const key = JSON.stringify(props);
19
18
  if (cache[key]) {
20
19
  if (cache[key] instanceof Promise) {
@@ -27,96 +26,10 @@ async function loadTamagui(props) {
27
26
  cache[key] = new Promise((res) => {
28
27
  resolver = res;
29
28
  });
30
- const tmpDir = join(process.cwd(), ".tamagui");
31
- const configOutPath = join(tmpDir, `tamagui.config.cjs`);
32
- const baseComponents = props.components.filter((x) => x !== "@tamagui/core");
33
- const componentOutPaths = baseComponents.map(
34
- (componentModule) => join(
35
- tmpDir,
36
- `${componentModule.split(sep).join("-").replace(/[^a-z0-9]+/gi, "")}-components.config.cjs`
37
- )
38
- );
39
- const external = [
40
- "@tamagui/core",
41
- "@tamagui/web",
42
- "@tamagui/core-node",
43
- "react",
44
- "react-dom",
45
- "react-native-svg"
46
- ];
47
- const configEntry = props.config ? join(process.cwd(), props.config) : "";
48
- if (process.env.NODE_ENV === "development" && ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui"))) {
49
- console.log(`Building config entry`, configEntry);
50
- }
51
- try {
52
- await ensureDir(tmpDir);
53
- } catch {
54
- }
55
- colorLog(
56
- Color.FgYellow,
57
- `
58
- Tamagui built config and components:`
59
- );
60
- colorLog(
61
- Color.Dim,
62
- `
63
- Config .${sep}${relative(process.cwd(), configOutPath)}
64
- Components ${[
65
- ...componentOutPaths.map((p) => `.${sep}${relative(process.cwd(), p)}`)
66
- ].join("\n ")}
67
- `
68
- );
69
- await Promise.all([
70
- props.config ? bundle({
71
- entryPoints: [configEntry],
72
- external,
73
- outfile: configOutPath
74
- }) : null,
75
- ...baseComponents.map((componentModule, i) => {
76
- return bundle({
77
- entryPoints: [componentModule],
78
- resolvePlatformSpecificEntries: true,
79
- external,
80
- outfile: componentOutPaths[i]
81
- });
82
- })
83
- ]);
84
29
  try {
85
30
  registerRequire();
86
- const out = require(configOutPath);
87
- const config = out.default || out;
88
- if (!config) {
89
- throw new Error(`No config: ${config}`);
90
- }
91
- let components = loadComponents({
92
- ...props,
93
- components: componentOutPaths
94
- });
95
- if (!components) {
96
- throw new Error(`No components found: ${componentOutPaths.join(", ")}`);
97
- }
98
- for (const component of components) {
99
- component.moduleName = baseComponents[componentOutPaths.indexOf(component.moduleName)];
100
- if (!component.moduleName) {
101
- throw new Error(`Tamagui internal err`);
102
- }
103
- }
104
- const coreComponents = loadComponents({
105
- ...props,
106
- components: ["@tamagui/core-node"]
107
- });
108
- if (coreComponents) {
109
- coreComponents[0].moduleName = "@tamagui/core";
110
- components = [...components, ...coreComponents];
111
- }
112
- if (process.env.NODE_ENV === "development" && ((_b = process.env.DEBUG) == null ? void 0 : _b.startsWith("tamagui"))) {
113
- console.log("Loaded components", components);
114
- }
115
- cache[key] = {
116
- components,
117
- nameToPaths: {},
118
- tamaguiConfig: config
119
- };
31
+ const bundleInfo = await bundleConfig(props);
32
+ cache[key] = bundleInfo;
120
33
  createTamagui(cache[key].tamaguiConfig);
121
34
  resolver(cache[key]);
122
35
  return cache[key];
@@ -136,13 +49,6 @@ function resolveWebOrNativeSpecificEntry(entry) {
136
49
  }
137
50
  return entry;
138
51
  }
139
- const esbuildOptions = {
140
- loader: "tsx",
141
- target: "es2018",
142
- format: "cjs",
143
- jsx: "transform",
144
- platform: "node"
145
- };
146
52
  function loadTamaguiSync(props) {
147
53
  const key = JSON.stringify(props);
148
54
  if (cache[key]) {
@@ -212,200 +118,80 @@ function loadTamaguiSync(props) {
212
118
  unregisterRequire();
213
119
  }
214
120
  }
215
- function interopDefaultExport(mod) {
216
- return (mod == null ? void 0 : mod.default) ?? mod;
217
- }
218
- const cacheComponents = {};
219
- function transformAddExports(ast) {
220
- const usedNames = /* @__PURE__ */ new Set();
221
- traverse(ast, {
222
- ExportNamedDeclaration(nodePath) {
223
- if (nodePath.node.specifiers) {
224
- for (const spec of nodePath.node.specifiers) {
225
- usedNames.add(
226
- t.isIdentifier(spec.exported) ? spec.exported.name : spec.exported.value
227
- );
228
- }
229
- }
230
- }
231
- });
232
- traverse(ast, {
233
- VariableDeclaration(nodePath) {
234
- if (!t.isProgram(nodePath.parent))
235
- return;
236
- const decs = nodePath.node.declarations;
237
- if (decs.length > 1)
238
- return;
239
- const [dec] = decs;
240
- if (!t.isIdentifier(dec.id))
241
- return;
242
- if (!dec.init)
243
- return;
244
- if (usedNames.has(dec.id.name))
245
- return;
246
- usedNames.add(dec.id.name);
247
- nodePath.replaceWith(
248
- t.exportNamedDeclaration(t.variableDeclaration("let", [dec]), [
249
- t.exportSpecifier(t.identifier(dec.id.name), t.identifier(dec.id.name))
250
- ])
251
- );
121
+ async function getOptions({
122
+ root = process.cwd(),
123
+ tsconfigPath = "tsconfig.json",
124
+ tamaguiOptions,
125
+ host,
126
+ debug
127
+ } = {}) {
128
+ const tsConfigFilePath = join(root, tsconfigPath);
129
+ if (!await fs.pathExists(tsConfigFilePath))
130
+ throw new Error(`No tsconfig found: ${tsConfigFilePath}`);
131
+ const dotDir = join(root, ".tamagui");
132
+ const pkgJson = await readJSON(join(root, "package.json"));
133
+ return {
134
+ mode: process.env.NODE_ENV === "production" ? "production" : "development",
135
+ root,
136
+ host: host || "127.0.0.1",
137
+ pkgJson,
138
+ debug,
139
+ tsconfigPath,
140
+ tamaguiOptions: {
141
+ components: ["tamagui"],
142
+ config: await getDefaultTamaguiConfigPath(),
143
+ ...tamaguiOptions
144
+ },
145
+ paths: {
146
+ dotDir,
147
+ conf: join(dotDir, "tamagui.config.json"),
148
+ types: join(dotDir, "types.json")
252
149
  }
253
- });
254
- return generate(ast, {
255
- concise: false,
256
- filename: "test.tsx",
257
- retainLines: false,
258
- sourceMaps: false
259
- }).code;
150
+ };
260
151
  }
261
- const esbuildit = (src, target) => {
262
- return esbuild.transformSync(src, {
263
- ...esbuildOptions,
264
- ...target === "modern" && {
265
- target: "es2022",
266
- jsx: "transform",
267
- loader: "tsx",
268
- platform: "neutral",
269
- format: "esm"
270
- }
271
- }).code;
272
- };
273
- function loadComponents(props) {
274
- const componentsModules = props.components;
275
- const key = componentsModules.join("");
276
- if (cacheComponents[key]) {
277
- return cacheComponents[key];
278
- }
279
- try {
280
- const info = componentsModules.flatMap((name) => {
281
- var _a;
282
- const extension = extname(name);
283
- const isLocal = Boolean(extension);
284
- const isDynamic = isLocal && !props.config;
285
- if (isDynamic && !process.env.TAMAGUI_ENABLE_DYNAMIC_LOAD) {
286
- return [];
287
- }
288
- const fileContents = isDynamic ? readFileSync(name, "utf-8") : "";
289
- const loadModule = isDynamic ? join(dirname(name), `.tamagui-dynamic-eval-${basename(name)}.tsx`) : name;
290
- let writtenContents = fileContents;
291
- let didBabel = false;
292
- function attemptLoad({ forceExports = false } = {}) {
293
- if (isDynamic) {
294
- writtenContents = forceExports ? esbuildit(
295
- transformAddExports(babelParse(esbuildit(fileContents, "modern")))
296
- ) : esbuildit(fileContents);
297
- writeFileSync(loadModule, writtenContents);
298
- }
299
- if (process.env.DEBUG === "tamagui") {
300
- console.log(`loadModule`, loadModule, require.resolve(loadModule));
301
- }
302
- return {
303
- moduleName: name,
304
- nameToInfo: getComponentStaticConfigByName(
305
- name,
306
- interopDefaultExport(require(loadModule))
307
- )
308
- };
309
- }
310
- const dispose = () => {
311
- isDynamic && removeSync(loadModule);
312
- };
313
- try {
314
- const res = attemptLoad({
315
- forceExports: true
316
- });
317
- didBabel = true;
318
- return res;
319
- } catch (err) {
320
- console.log("babel err", err, writtenContents);
321
- writtenContents = fileContents;
322
- if ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui")) {
323
- console.log(`Error parsing babel likely`, err);
324
- }
325
- } finally {
326
- dispose();
327
- }
328
- try {
329
- return attemptLoad({
330
- forceExports: false
331
- });
332
- } catch (err) {
333
- if (!process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD) {
334
- console.log(`
335
-
336
- Tamagui attempted but failed to dynamically load components in:
337
- ${name}
338
-
339
- This will leave some styled() tags unoptimized.
340
- Disable this file (or dynamic loading altogether):
341
-
342
- disableExtractFoundComponents: ['${name}'] | true
343
-
344
- Quiet this warning with environment variable:
345
-
346
- TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1
347
-
348
- `);
349
- console.log(err);
350
- console.log(
351
- `At: ${loadModule}`,
352
- `
353
- didBabel: ${didBabel}`,
354
- `
355
- In:`,
356
- writtenContents,
357
- `
358
- isDynamic: `,
359
- isDynamic
360
- );
152
+ async function watchTamaguiConfig(tamaguiOptions) {
153
+ const options = await getOptions({ tamaguiOptions });
154
+ if (!options.tamaguiOptions.config)
155
+ return;
156
+ await generateTamaguiConfig(options);
157
+ const context = await esbuild.context({
158
+ entryPoints: [options.tamaguiOptions.config],
159
+ sourcemap: false,
160
+ // dont output just use esbuild as a watcher
161
+ write: false,
162
+ plugins: [
163
+ {
164
+ name: `on-rebuild`,
165
+ setup({ onEnd }) {
166
+ onEnd((res) => {
167
+ generateTamaguiConfig(options);
168
+ });
361
169
  }
362
- return [];
363
- } finally {
364
- dispose();
365
170
  }
366
- });
367
- cacheComponents[key] = info;
368
- return info;
369
- } catch (err) {
370
- console.log(`Tamagui error bundling components`, err.message, err.stack);
371
- return null;
372
- }
373
- }
374
- function getComponentStaticConfigByName(name, exported) {
375
- const components = {};
376
- try {
377
- if (!exported || typeof exported !== "object" || Array.isArray(exported)) {
378
- throw new Error(`Invalid export from package ${name}: ${typeof exported}`);
379
- }
380
- for (const key in exported) {
381
- const found = getTamaguiComponent(key, exported[key]);
382
- if (found) {
383
- const { Component, ...sc } = found.staticConfig;
384
- components[key] = { staticConfig: sc };
385
- }
386
- }
387
- } catch (err) {
388
- if (process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD !== "1") {
389
- console.error(
390
- `Tamagui failed getting from ${name} (Disable error by setting environment variable TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1)`
391
- );
392
- console.error(err);
393
- }
394
- }
395
- return components;
171
+ ]
172
+ });
173
+ await context.watch();
396
174
  }
397
- function getTamaguiComponent(name, Component) {
398
- if (name[0].toUpperCase() !== name[0]) {
399
- return;
400
- }
401
- const staticConfig = Component == null ? void 0 : Component.staticConfig;
402
- if (staticConfig) {
403
- return Component;
175
+ const defaultPaths = ["tamagui.config.ts", join("src", "tamagui.config.ts")];
176
+ let cachedPath = "";
177
+ async function getDefaultTamaguiConfigPath() {
178
+ if (cachedPath)
179
+ return cachedPath;
180
+ const existingPaths = await Promise.all(defaultPaths.map((path) => pathExists(path)));
181
+ const existing = existingPaths.findIndex((x) => !!x);
182
+ const found = defaultPaths[existing];
183
+ if (!found) {
184
+ throw new Error(`No found tamagui.config.ts`);
404
185
  }
186
+ cachedPath = found;
187
+ return found;
405
188
  }
406
189
  export {
190
+ TamaguiProjectInfo,
191
+ getOptions,
407
192
  loadTamagui,
408
193
  loadTamaguiSync,
409
- resolveWebOrNativeSpecificEntry
194
+ resolveWebOrNativeSpecificEntry,
195
+ watchTamaguiConfig
410
196
  };
411
197
  //# sourceMappingURL=loadTamagui.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extractor/loadTamagui.ts"],
4
- "sourcesContent": ["import { readFileSync } from 'fs'\n/* eslint-disable no-console */\nimport { basename, dirname, extname, join, relative, resolve, 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 { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/core-node'\nimport { createTamagui } from '@tamagui/core-node'\nimport esbuild from 'esbuild'\nimport { ensureDir, existsSync, removeSync, writeFileSync } from 'fs-extra'\n\nimport { SHOULD_DEBUG } from '../constants.js'\nimport { getNameToPaths, registerRequire, unregisterRequire } from '../require.js'\nimport { babelParse } from './babelParse.js'\nimport { bundle } from './bundle.js'\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\ntype Props = {\n components: string[]\n config?: string\n forceExports?: boolean\n}\n\nconst cache = {}\n\n// TODO needs a plugin for webpack / vite to run this once at startup and not again until changed...\n\nexport async function loadTamagui(props: Props): Promise<TamaguiProjectInfo> {\n const key = JSON.stringify(props)\n if (cache[key]) {\n if (cache[key] instanceof Promise) {\n return await cache[key]\n }\n return cache[key]\n }\n\n let resolver: Function = () => {}\n cache[key] = new Promise((res) => {\n resolver = res\n })\n\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\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 const external = [\n '@tamagui/core',\n '@tamagui/web',\n '@tamagui/core-node',\n 'react',\n 'react-dom',\n 'react-native-svg',\n ]\n const configEntry = props.config ? join(process.cwd(), props.config) : ''\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 colorLog(\n Color.FgYellow,\n `\nTamagui 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 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 try {\n registerRequire()\n const out = require(configOutPath)\n const config = out.default || out\n\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 =\n baseComponents[componentOutPaths.indexOf(component.moduleName)]\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\n cache[key] = {\n components,\n nameToPaths: {},\n tamaguiConfig: config,\n }\n\n // init core-node\n createTamagui(cache[key].tamaguiConfig)\n\n resolver(cache[key])\n\n return cache[key]\n } finally {\n unregisterRequire()\n }\n}\n\nexport function resolveWebOrNativeSpecificEntry(entry: string) {\n const workspaceRoot = resolve()\n const resolved = require.resolve(entry, { paths: [workspaceRoot] })\n const ext = extname(resolved)\n const fileName = basename(resolved).replace(ext, '')\n const specificExt = process.env.TAMAGUI_TARGET === 'web' ? 'web' : 'native'\n const specificFile = join(dirname(resolved), fileName + '.' + specificExt + ext)\n if (existsSync(specificFile)) {\n return specificFile\n }\n return entry\n}\n\nconst esbuildOptions = {\n loader: 'tsx',\n target: 'es2018',\n format: 'cjs',\n jsx: 'transform',\n platform: 'node',\n} as const\n\n// loads in-process using esbuild-register\nexport function loadTamaguiSync(props: Props): TamaguiProjectInfo {\n const key = JSON.stringify(props)\n if (cache[key]) {\n return cache[key]\n }\n\n const { unregister } = require('esbuild-register/dist/node').register(esbuildOptions)\n\n try {\n registerRequire()\n\n // lets shim require and avoid importing react-native + react-native-web\n // we just need to read the config around them\n process.env.IS_STATIC = 'is_static'\n const devValueOG = globalThis['__DEV__' as any]\n globalThis['__DEV__' as any] = process.env.NODE_ENV === 'development'\n\n try {\n // config\n let tamaguiConfig: TamaguiInternalConfig | null = null\n if (props.config) {\n const configPath = join(process.cwd(), props.config)\n const exp = require(configPath)\n tamaguiConfig = (exp['default'] || exp) as TamaguiInternalConfig\n if (!tamaguiConfig || !tamaguiConfig.parsed) {\n const confPath = require.resolve(configPath)\n throw new Error(`Can't find valid config in ${confPath}:\n \n Be sure you \"export default\" the config.`)\n }\n }\n\n // components\n const components = loadComponents(props)\n if (!components) {\n throw new Error(`No components loaded`)\n }\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, components)\n }\n\n // undo shims\n process.env.IS_STATIC = undefined\n globalThis['__DEV__' as any] = devValueOG\n\n // set up core-node\n if (props.config && tamaguiConfig) {\n createTamagui(tamaguiConfig as any)\n }\n\n cache[key] = {\n components,\n tamaguiConfig,\n nameToPaths: getNameToPaths(),\n }\n } catch (err) {\n if (err instanceof Error) {\n console.warn(\n `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`\n )\n console.log(`\\n\\n ${err.message}\\n\\n`)\n if (SHOULD_DEBUG) {\n console.log(err.stack)\n }\n } else {\n console.error(`Error loading tamagui.config.ts`, err)\n }\n return {\n components: [],\n tamaguiConfig: getDefaultTamaguiConfig(),\n nameToPaths: {},\n }\n }\n\n return cache[key]\n } finally {\n unregister()\n unregisterRequire()\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\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 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\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"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { basename, dirname, extname, join, resolve } from 'path'\n\nimport { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport { createTamagui } from '@tamagui/core-node'\nimport { CLIResolvedOptions, CLIUserOptions } from '@tamagui/types'\nimport type { TamaguiInternalConfig } from '@tamagui/web'\nimport esbuild from 'esbuild'\nimport fs, { existsSync, pathExists, readJSON } from 'fs-extra'\n\nimport { SHOULD_DEBUG } from '../constants.js'\nimport { getNameToPaths, registerRequire, unregisterRequire } from '../require.js'\nimport { TamaguiOptions } from '../types.js'\nimport {\n Props,\n TamaguiProjectInfo,\n bundleConfig,\n esbuildOptions,\n loadComponents,\n} from './bundleConfig.js'\nimport { generateTamaguiConfig } from './generateTamaguiConfig.js'\n\nconst cache = {}\n\nexport async function loadTamagui(props: Props): Promise<TamaguiProjectInfo> {\n const key = JSON.stringify(props)\n if (cache[key]) {\n if (cache[key] instanceof Promise) {\n return await cache[key]\n }\n return cache[key]\n }\n\n let resolver: Function = () => {}\n cache[key] = new Promise((res) => {\n resolver = res\n })\n\n try {\n registerRequire()\n const bundleInfo = await bundleConfig(props)\n\n cache[key] = bundleInfo\n\n // init core-node\n createTamagui(cache[key].tamaguiConfig)\n\n resolver(cache[key])\n\n return cache[key]\n } finally {\n unregisterRequire()\n }\n}\n\nexport function resolveWebOrNativeSpecificEntry(entry: string) {\n const workspaceRoot = resolve()\n const resolved = require.resolve(entry, { paths: [workspaceRoot] })\n const ext = extname(resolved)\n const fileName = basename(resolved).replace(ext, '')\n const specificExt = process.env.TAMAGUI_TARGET === 'web' ? 'web' : 'native'\n const specificFile = join(dirname(resolved), fileName + '.' + specificExt + ext)\n if (existsSync(specificFile)) {\n return specificFile\n }\n return entry\n}\n\n// loads in-process using esbuild-register\nexport function loadTamaguiSync(props: Props): TamaguiProjectInfo {\n const key = JSON.stringify(props)\n if (cache[key]) {\n return cache[key]\n }\n\n const { unregister } = require('esbuild-register/dist/node').register(esbuildOptions)\n\n try {\n registerRequire()\n\n // lets shim require and avoid importing react-native + react-native-web\n // we just need to read the config around them\n process.env.IS_STATIC = 'is_static'\n const devValueOG = globalThis['__DEV__' as any]\n globalThis['__DEV__' as any] = process.env.NODE_ENV === 'development'\n\n try {\n // config\n let tamaguiConfig: TamaguiInternalConfig | null = null\n if (props.config) {\n const configPath = join(process.cwd(), props.config)\n const exp = require(configPath)\n tamaguiConfig = (exp['default'] || exp) as TamaguiInternalConfig\n if (!tamaguiConfig || !tamaguiConfig.parsed) {\n const confPath = require.resolve(configPath)\n throw new Error(`Can't find valid config in ${confPath}:\n \n Be sure you \"export default\" the config.`)\n }\n }\n\n // components\n const components = loadComponents(props)\n if (!components) {\n throw new Error(`No components loaded`)\n }\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, components)\n }\n\n // undo shims\n process.env.IS_STATIC = undefined\n globalThis['__DEV__' as any] = devValueOG\n\n // set up core-node\n if (props.config && tamaguiConfig) {\n createTamagui(tamaguiConfig as any)\n }\n\n cache[key] = {\n components,\n tamaguiConfig,\n nameToPaths: getNameToPaths(),\n }\n } catch (err) {\n if (err instanceof Error) {\n console.warn(\n `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`\n )\n console.log(`\\n\\n ${err.message}\\n\\n`)\n if (SHOULD_DEBUG) {\n console.log(err.stack)\n }\n } else {\n console.error(`Error loading tamagui.config.ts`, err)\n }\n return {\n components: [],\n tamaguiConfig: getDefaultTamaguiConfig(),\n nameToPaths: {},\n }\n }\n\n return cache[key]\n } finally {\n unregister()\n unregisterRequire()\n }\n}\n\nexport async function getOptions({\n root = process.cwd(),\n tsconfigPath = 'tsconfig.json',\n tamaguiOptions,\n host,\n debug,\n}: Partial<CLIUserOptions> = {}): Promise<CLIResolvedOptions> {\n const tsConfigFilePath = join(root, tsconfigPath)\n if (!(await fs.pathExists(tsConfigFilePath)))\n throw new Error(`No tsconfig found: ${tsConfigFilePath}`)\n const dotDir = join(root, '.tamagui')\n const pkgJson = await readJSON(join(root, 'package.json'))\n\n return {\n mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',\n root,\n host: host || '127.0.0.1',\n pkgJson,\n debug,\n tsconfigPath,\n tamaguiOptions: {\n components: ['tamagui'],\n config: await getDefaultTamaguiConfigPath(),\n ...tamaguiOptions,\n },\n paths: {\n dotDir,\n conf: join(dotDir, 'tamagui.config.json'),\n types: join(dotDir, 'types.json'),\n },\n }\n}\n\nexport async function watchTamaguiConfig(tamaguiOptions: TamaguiOptions) {\n const options = await getOptions({ tamaguiOptions })\n\n if (!options.tamaguiOptions.config) return\n\n await generateTamaguiConfig(options)\n const context = await esbuild.context({\n entryPoints: [options.tamaguiOptions.config],\n sourcemap: false,\n // dont output just use esbuild as a watcher\n write: false,\n\n plugins: [\n {\n name: `on-rebuild`,\n setup({ onEnd }) {\n onEnd((res) => {\n generateTamaguiConfig(options)\n })\n },\n },\n ],\n })\n\n await context.watch()\n}\n\nconst defaultPaths = ['tamagui.config.ts', join('src', 'tamagui.config.ts')]\nlet cachedPath = ''\n\nasync function getDefaultTamaguiConfigPath() {\n if (cachedPath) return cachedPath\n const existingPaths = await Promise.all(defaultPaths.map((path) => pathExists(path)))\n const existing = existingPaths.findIndex((x) => !!x)\n const found = defaultPaths[existing]\n if (!found) {\n throw new Error(`No found tamagui.config.ts`)\n }\n cachedPath = found\n return found\n}\n\nexport { TamaguiProjectInfo }"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/static",
3
- "version": "1.14.9",
3
+ "version": "1.15.0",
4
4
  "source": "src/index.ts",
5
5
  "types": "./types/index.d.ts",
6
6
  "main": "dist/cjs/index.js",
@@ -17,7 +17,7 @@
17
17
  "clean": "tamagui-build clean",
18
18
  "clean:build": "tamagui-build clean:build",
19
19
  "lint": "../../node_modules/.bin/rome check src",
20
- "lint:fix": "../../node_modules/.bin/rome check --apply-suggested src"
20
+ "lint:fix": "../../node_modules/.bin/rome check --apply src"
21
21
  },
22
22
  "tests": {
23
23
  "parallel": true
@@ -34,16 +34,16 @@
34
34
  "@babel/plugin-transform-react-jsx": "^7.19.0",
35
35
  "@babel/runtime": "^7.19.4",
36
36
  "@babel/traverse": "^7.19.6",
37
- "@tamagui/build": "1.14.9",
38
- "@tamagui/cli-color": "1.14.9",
39
- "@tamagui/config-default-node": "1.14.9",
40
- "@tamagui/core-node": "1.14.9",
41
- "@tamagui/fake-react-native": "1.14.9",
42
- "@tamagui/helpers": "1.14.9",
43
- "@tamagui/helpers-node": "1.14.9",
44
- "@tamagui/proxy-worm": "1.14.9",
45
- "@tamagui/shorthands": "1.14.9",
46
- "@tamagui/types": "1.14.9",
37
+ "@tamagui/build": "1.15.0",
38
+ "@tamagui/cli-color": "1.15.0",
39
+ "@tamagui/config-default-node": "1.15.0",
40
+ "@tamagui/core-node": "1.15.0",
41
+ "@tamagui/fake-react-native": "1.15.0",
42
+ "@tamagui/helpers": "1.15.0",
43
+ "@tamagui/helpers-node": "1.15.0",
44
+ "@tamagui/proxy-worm": "1.15.0",
45
+ "@tamagui/shorthands": "1.15.0",
46
+ "@tamagui/types": "1.15.0",
47
47
  "babel-literal-to-ast": "^2.1.0",
48
48
  "esbuild": "^0.17.5",
49
49
  "esbuild-register": "^3.4.2",
@@ -52,15 +52,15 @@
52
52
  "fs-extra": "^11.1.0",
53
53
  "invariant": "^2.2.4",
54
54
  "lodash": "^4.17.21",
55
- "react-native-web-internals": "1.14.9",
56
- "react-native-web-lite": "1.14.9"
55
+ "react-native-web-internals": "1.15.0",
56
+ "react-native-web-lite": "1.15.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@babel/plugin-syntax-typescript": "^7.18.6",
60
60
  "@babel/types": "^7.19.4",
61
61
  "@dish/babel-preset": "^0.0.6",
62
62
  "@expo/match-media": "^0.4.0",
63
- "@tamagui/test-design-system": "1.14.9",
63
+ "@tamagui/test-design-system": "1.15.0",
64
64
  "@testing-library/react": "^13.4.0",
65
65
  "@types/babel__generator": "^7.6.4",
66
66
  "@types/babel__traverse": "^7.18.2",
@@ -76,7 +76,7 @@
76
76
  "react-native-web": "^0.18.3",
77
77
  "react-test-renderer": "^18.2.0",
78
78
  "style-loader": "^3.3.1",
79
- "typescript": "^4.7.4",
79
+ "typescript": "^5.0.4",
80
80
  "vitest": "^0.26.3",
81
81
  "webpack": "^5.74.0"
82
82
  },