@tamagui/metro-plugin 2.7.7 → 3.0.0-beta.1093.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.
Files changed (72) hide show
  1. package/README.md +12 -0
  2. package/dist/cjs/babel.cjs +76 -0
  3. package/dist/cjs/compilerCache.cjs +236 -0
  4. package/dist/cjs/diagnostics.cjs +40 -0
  5. package/dist/cjs/frontend.cjs +885 -0
  6. package/dist/cjs/index.cjs +113 -0
  7. package/dist/cjs/lowering.cjs +108 -0
  8. package/dist/cjs/metroResolver.cjs +196 -0
  9. package/dist/cjs/transformOptions.cjs +34 -0
  10. package/dist/cjs/transformer.cjs +146 -0
  11. package/dist/cjs/zeroRuntime.cjs +139 -0
  12. package/dist/cjs/zeroSerializer.cjs +149 -0
  13. package/dist/esm/babel.mjs +52 -0
  14. package/dist/esm/babel.mjs.map +1 -0
  15. package/dist/esm/compilerCache.mjs +212 -0
  16. package/dist/esm/compilerCache.mjs.map +1 -0
  17. package/dist/esm/diagnostics.mjs +18 -0
  18. package/dist/esm/diagnostics.mjs.map +1 -0
  19. package/dist/esm/frontend.mjs +855 -0
  20. package/dist/esm/frontend.mjs.map +1 -0
  21. package/dist/esm/index.mjs +76 -22
  22. package/dist/esm/index.mjs.map +1 -1
  23. package/dist/esm/lowering.mjs +89 -0
  24. package/dist/esm/lowering.mjs.map +1 -0
  25. package/dist/esm/metroResolver.mjs +173 -0
  26. package/dist/esm/metroResolver.mjs.map +1 -0
  27. package/dist/esm/transformOptions.mjs +14 -0
  28. package/dist/esm/transformOptions.mjs.map +1 -0
  29. package/dist/esm/transformer.mjs +124 -0
  30. package/dist/esm/transformer.mjs.map +1 -0
  31. package/dist/esm/zeroRuntime.mjs +105 -0
  32. package/dist/esm/zeroRuntime.mjs.map +1 -0
  33. package/dist/esm/zeroSerializer.mjs +123 -0
  34. package/dist/esm/zeroSerializer.mjs.map +1 -0
  35. package/package.json +33 -5
  36. package/src/babel.ts +87 -0
  37. package/src/compilerCache.ts +346 -0
  38. package/src/diagnostics.ts +47 -0
  39. package/src/frontend.ts +1216 -0
  40. package/src/index.ts +143 -14
  41. package/src/lowering.ts +136 -0
  42. package/src/metroResolver.ts +209 -0
  43. package/src/transformOptions.ts +36 -0
  44. package/src/transformer.ts +220 -0
  45. package/src/zeroRuntime.ts +212 -0
  46. package/src/zeroSerializer.ts +175 -0
  47. package/types/babel.d.ts +28 -0
  48. package/types/babel.d.ts.map +11 -0
  49. package/types/compilerCache.d.ts +63 -0
  50. package/types/compilerCache.d.ts.map +11 -0
  51. package/types/diagnostics.d.ts +16 -0
  52. package/types/diagnostics.d.ts.map +11 -0
  53. package/types/frontend.d.ts +73 -0
  54. package/types/frontend.d.ts.map +11 -0
  55. package/types/index.d.ts +49 -32
  56. package/types/index.d.ts.map +11 -1
  57. package/types/lowering.d.ts +20 -0
  58. package/types/lowering.d.ts.map +11 -0
  59. package/types/metroResolver.d.ts +21 -0
  60. package/types/metroResolver.d.ts.map +11 -0
  61. package/types/transformOptions.d.ts +13 -0
  62. package/types/transformOptions.d.ts.map +11 -0
  63. package/types/transformer.d.ts +28 -0
  64. package/types/transformer.d.ts.map +11 -0
  65. package/types/zeroRuntime.d.ts +75 -0
  66. package/types/zeroRuntime.d.ts.map +11 -0
  67. package/types/zeroSerializer.d.ts +6 -0
  68. package/types/zeroSerializer.d.ts.map +11 -0
  69. package/dist/cjs/index.js +0 -45
  70. package/dist/cjs/index.js.map +0 -6
  71. package/dist/esm/index.js +0 -25
  72. package/dist/esm/index.js.map +0 -1
@@ -0,0 +1,113 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
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, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var index_exports = {};
28
+ __export(index_exports, {
29
+ METRO_COMPILER_CACHE_VERSION: () => import_compilerCache2.METRO_COMPILER_CACHE_VERSION,
30
+ MetroCompilerCache: () => import_compilerCache2.MetroCompilerCache,
31
+ MetroCompilerCacheError: () => import_compilerCache2.MetroCompilerCacheError,
32
+ defaultMetroCompilerCacheRoot: () => import_compilerCache2.defaultMetroCompilerCacheRoot,
33
+ getMetroCompilerFrontend: () => getMetroCompilerFrontend,
34
+ withTamagui: () => withTamagui
35
+ });
36
+ module.exports = __toCommonJS(index_exports);
37
+ var import_node_module = require("node:module");
38
+ var import_node_path = require("node:path");
39
+ var import_static = __toESM(require("@tamagui/static"), 1);
40
+ var import_compilerCache = require("./compilerCache.cjs");
41
+ var import_zeroSerializer = require("./zeroSerializer.cjs");
42
+ var import_zeroRuntime = require("./zeroRuntime.cjs");
43
+ var import_diagnostics = require("./diagnostics.cjs");
44
+ var import_frontend = require("./frontend.cjs");
45
+ var import_transformer = require("./transformer.cjs");
46
+ var import_transformOptions = require("./transformOptions.cjs");
47
+ var import_compilerCache2 = require("./compilerCache.cjs");
48
+ const import_meta = {};
49
+ const frontends = /* @__PURE__ */ new WeakMap();
50
+ const { loadTamaguiBuildConfigSync } = import_static.default;
51
+ const requireFromPlugin = (0, import_node_module.createRequire)(typeof __filename === "string" ? __filename : import_meta.url);
52
+ function getMetroCompilerFrontend(metroConfig) {
53
+ return frontends.get(metroConfig) ?? null;
54
+ }
55
+ function withTamagui(metroConfig, optionsIn) {
56
+ const { compilerCacheRoot, zeroIslandBuild, zeroPublicDir = "public", ...tamaguiOptionsIn } = optionsIn || {};
57
+ const options = loadTamaguiBuildConfigSync(tamaguiOptionsIn);
58
+ metroConfig.resolver = {
59
+ ...metroConfig.resolver,
60
+ sourceExts: [.../* @__PURE__ */ new Set([...metroConfig.resolver?.sourceExts || [], "css"])]
61
+ };
62
+ metroConfig.transformer = {
63
+ ...metroConfig.transformer,
64
+ tamagui: options
65
+ };
66
+ const zeroProjectRoot = metroConfig.projectRoot ?? process.cwd();
67
+ const zero = (0, import_zeroRuntime.createMetroZeroController)(options, zeroProjectRoot, zeroIslandBuild ?? null, zeroPublicDir);
68
+ if (zero?.isEnforcing) {
69
+ (0, import_zeroSerializer.applyMetroZeroRuntime)(metroConfig, zero);
70
+ const resolveRequest = metroConfig.resolver.resolveRequest;
71
+ metroConfig.resolver.resolveRequest = (context, moduleName, platform) => {
72
+ const resolved = resolveRequest ? resolveRequest(context, moduleName, platform) : context.resolveRequest(context, moduleName, platform);
73
+ if (resolved?.type === "sourceFile" && /(^|\/)(?:directStyleCSS|getCSSStylesAtomic)\.(?:c?js|mjs)$/.test(resolved.filePath)) {
74
+ return {
75
+ ...resolved,
76
+ filePath: resolved.filePath.replace(/(?:directStyleCSS|getCSSStylesAtomic)(?=\.)/, (name) => `${name}Compiled`)
77
+ };
78
+ }
79
+ return resolved;
80
+ };
81
+ }
82
+ if (!options.disable) {
83
+ const projectRoot = metroConfig.projectRoot ?? process.cwd();
84
+ const requireFromProject = (0, import_node_module.createRequire)((0, import_node_path.join)(projectRoot, "package.json"));
85
+ const configuredBabelTransformerPath = metroConfig.transformer.babelTransformerPath ?? "metro-babel-transformer";
86
+ const originalBabelTransformerPath = (0, import_node_path.isAbsolute)(configuredBabelTransformerPath) ? configuredBabelTransformerPath : requireFromProject.resolve(configuredBabelTransformerPath);
87
+ const cacheBaseRoot = compilerCacheRoot ?? (0, import_compilerCache.defaultMetroCompilerCacheRoot)(projectRoot);
88
+ const frontend = new import_frontend.MetroCompilerFrontend({
89
+ projectRoot,
90
+ resolver: metroConfig.resolver,
91
+ transformer: metroConfig.transformer,
92
+ tamaguiOptions: options,
93
+ originalBabelTransformerPath,
94
+ cacheRoot: cacheBaseRoot,
95
+ zero,
96
+ reportDiagnostic(diagnostic) {
97
+ console.warn((0, import_diagnostics.formatMetroCompilerDiagnostic)(diagnostic, projectRoot));
98
+ }
99
+ });
100
+ const transformerFactoryPath = requireFromPlugin.resolve("@tamagui/metro-plugin/transformer");
101
+ metroConfig.transformer.babelTransformerPath = (0, import_transformer.writeMetroCompilerTransformerBridge)(transformerFactoryPath, {
102
+ cacheBaseRoot,
103
+ originalBabelTransformerPath,
104
+ projectRoot,
105
+ runtimeLiteral: zero?.isEnforcing && !zero.islandBuild ? "zero" : "full",
106
+ didOutputCSSLiteral: zero?.isEnforcing ? "1" : void 0
107
+ });
108
+ const userGetTransformOptions = metroConfig.transformer.getTransformOptions;
109
+ metroConfig.transformer.getTransformOptions = (0, import_transformOptions.composeMetroGetTransformOptions)(frontend, userGetTransformOptions);
110
+ frontends.set(metroConfig, frontend);
111
+ }
112
+ return metroConfig;
113
+ }
@@ -0,0 +1,108 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
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, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var lowering_exports = {};
22
+ __export(lowering_exports, { applyMetroCompilerPlan: () => applyMetroCompilerPlan });
23
+ module.exports = __toCommonJS(lowering_exports);
24
+ var import_compiler_core = require("@tamagui/compiler-core");
25
+ var import_trace_mapping = require("@jridgewell/trace-mapping");
26
+ var import_babel = require("./babel.cjs");
27
+ function lineStarts(source) {
28
+ const starts = [0];
29
+ for (let index = 0; index < source.length; index++) {
30
+ if (source.charCodeAt(index) === 10) starts.push(index + 1);
31
+ }
32
+ return starts;
33
+ }
34
+ function sourceIndex(starts, position) {
35
+ return (starts[position.line - 1] ?? starts.at(-1) ?? 0) + position.column;
36
+ }
37
+ function tracePosition(loweredMap, position) {
38
+ const original = (0, import_trace_mapping.originalPositionFor)(loweredMap, {
39
+ line: position.line,
40
+ column: position.column,
41
+ bias: import_trace_mapping.GREATEST_LOWER_BOUND
42
+ });
43
+ return original.line == null || original.column == null ? null : {
44
+ line: original.line,
45
+ column: original.column
46
+ };
47
+ }
48
+ function remapAstLocations(ast, loweredMap, source, filename) {
49
+ const starts = lineStarts(source);
50
+ const seen = /* @__PURE__ */ new Set();
51
+ const visit = (value) => {
52
+ if (!value || typeof value !== "object" || seen.has(value)) return;
53
+ seen.add(value);
54
+ if (Array.isArray(value)) {
55
+ for (const child of value) visit(child);
56
+ return;
57
+ }
58
+ const node = value;
59
+ const loc = node.loc;
60
+ if (loc?.start && loc?.end) {
61
+ const start = tracePosition(loweredMap, loc.start);
62
+ const end = tracePosition(loweredMap, loc.end);
63
+ if (start && end) {
64
+ node.start = sourceIndex(starts, start);
65
+ node.end = sourceIndex(starts, end);
66
+ node.loc = {
67
+ ...loc,
68
+ start,
69
+ end,
70
+ filename
71
+ };
72
+ }
73
+ }
74
+ for (const [key, child] of Object.entries(node)) {
75
+ if (key === "loc" || key === "tokens") continue;
76
+ visit(child);
77
+ }
78
+ };
79
+ visit(ast);
80
+ }
81
+ async function applyMetroCompilerPlan(args, plan, transformerPath) {
82
+ const output = (0, import_compiler_core.applyLoweredModule)(args.src, (0, import_compiler_core.resolvedModuleId)(args.filename), plan);
83
+ if (!output.changed || !output.map) {
84
+ return {
85
+ compiled: await (0, import_babel.compileWithUserBabel)(transformerPath, args),
86
+ lowering: {
87
+ applied: false,
88
+ diagnostics: plan.diagnostics,
89
+ sourceMapComposed: false,
90
+ stats: plan.stats
91
+ }
92
+ };
93
+ }
94
+ const compiled = await (0, import_babel.compileWithUserBabel)(transformerPath, {
95
+ ...args,
96
+ src: output.code
97
+ });
98
+ remapAstLocations(compiled.result.ast, new import_trace_mapping.TraceMap(output.map), args.src, args.filename);
99
+ return {
100
+ compiled,
101
+ lowering: {
102
+ applied: true,
103
+ diagnostics: plan.diagnostics,
104
+ sourceMapComposed: true,
105
+ stats: plan.stats
106
+ }
107
+ };
108
+ }
@@ -0,0 +1,196 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
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, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var metroResolver_exports = {};
22
+ __export(metroResolver_exports, {
23
+ createMetroCompilerResolver: () => createMetroCompilerResolver,
24
+ isCompilerSourceFile: () => isCompilerSourceFile,
25
+ moduleSpecifiersFromAst: () => moduleSpecifiersFromAst
26
+ });
27
+ module.exports = __toCommonJS(metroResolver_exports);
28
+ var import_node_fs = require("node:fs");
29
+ var import_node_module = require("node:module");
30
+ var import_node_path = require("node:path");
31
+ function compareCodeUnits(left, right) {
32
+ return left < right ? -1 : left > right ? 1 : 0;
33
+ }
34
+ function findClosestPackage(path) {
35
+ let directory = (0, import_node_fs.existsSync)(path) && (0, import_node_fs.statSync)(path).isDirectory() ? path : (0, import_node_path.dirname)(path);
36
+ const root = (0, import_node_path.parse)(directory).root;
37
+ while (true) {
38
+ const packagePath = (0, import_node_path.join)(directory, "package.json");
39
+ if ((0, import_node_fs.existsSync)(packagePath)) {
40
+ try {
41
+ return {
42
+ rootPath: directory,
43
+ packageJson: JSON.parse((0, import_node_fs.readFileSync)(packagePath, "utf8")),
44
+ packageRelativePath: (0, import_node_path.relative)(directory, path)
45
+ };
46
+ } catch {
47
+ return null;
48
+ }
49
+ }
50
+ if (directory === root || directory.endsWith(`${(0, import_node_path.join)("node_modules")}`)) {
51
+ return null;
52
+ }
53
+ directory = (0, import_node_path.dirname)(directory);
54
+ }
55
+ }
56
+ function lookup(projectRoot, path) {
57
+ const absolutePath = (0, import_node_path.isAbsolute)(path) ? path : (0, import_node_path.resolve)(projectRoot, path);
58
+ try {
59
+ const stat = (0, import_node_fs.lstatSync)(absolutePath);
60
+ const realPath = (0, import_node_fs.realpathSync)(absolutePath);
61
+ return {
62
+ exists: true,
63
+ type: stat.isDirectory() ? "d" : "f",
64
+ realPath
65
+ };
66
+ } catch {
67
+ return { exists: false };
68
+ }
69
+ }
70
+ function moduleSpecifiersFromAst(ast) {
71
+ const specifiers = /* @__PURE__ */ new Map();
72
+ const seen = /* @__PURE__ */ new Set();
73
+ function add(value, isESMImport) {
74
+ if (typeof value !== "string") return;
75
+ specifiers.set(value, (specifiers.get(value) ?? false) || isESMImport);
76
+ }
77
+ function visit(value) {
78
+ if (!value || typeof value !== "object") return;
79
+ if (seen.has(value)) return;
80
+ seen.add(value);
81
+ if (Array.isArray(value)) {
82
+ for (const child of value) visit(child);
83
+ return;
84
+ }
85
+ const node = value;
86
+ if (node.type === "ImportDeclaration" || node.type === "ExportAllDeclaration" || node.type === "ExportNamedDeclaration") {
87
+ add(node.source?.value, true);
88
+ } else if (node.type === "CallExpression") {
89
+ const first = node.arguments?.[0];
90
+ if (node.callee?.type === "Import") {
91
+ add(first?.value, true);
92
+ } else if (node.callee?.type === "Identifier" && node.callee.name === "require") {
93
+ add(first?.value, false);
94
+ }
95
+ }
96
+ for (const [key, child] of Object.entries(node)) {
97
+ if (key === "loc" || key === "comments" || key === "tokens") continue;
98
+ visit(child);
99
+ }
100
+ }
101
+ visit(ast);
102
+ return [...specifiers].sort(([left], [right]) => compareCodeUnits(left, right)).map(([specifier, isESMImport]) => ({
103
+ specifier,
104
+ isESMImport
105
+ }));
106
+ }
107
+ function createMetroCompilerResolver(config) {
108
+ const requireFromProject = (0, import_node_module.createRequire)((0, import_node_path.join)(config.projectRoot, "package.json"));
109
+ const resolverPackage = requireFromProject("metro-resolver/package.json");
110
+ if (!resolverPackage.version.startsWith("0.84.")) {
111
+ throw new Error(`@tamagui/metro-plugin requires the Metro 0.84 resolver contract, found ${resolverPackage.version}`);
112
+ }
113
+ const resolverModule = requireFromProject("metro-resolver");
114
+ const metroResolve = resolverModule.resolve;
115
+ const createDefaultContextModule = requireFromProject("metro-resolver/private/createDefaultContext");
116
+ const createDefaultContext = createDefaultContextModule.default ?? createDefaultContextModule;
117
+ const resolver = config.resolver ?? {};
118
+ const fileSystemLookup = (path) => lookup(config.projectRoot, path);
119
+ const getPackage = (packagePath) => {
120
+ try {
121
+ return JSON.parse((0, import_node_fs.readFileSync)(packagePath, "utf8"));
122
+ } catch {
123
+ return null;
124
+ }
125
+ };
126
+ return {
127
+ version: resolverPackage.version,
128
+ resolve(importer, dependency, platform) {
129
+ const dependencyDescriptor = {
130
+ name: dependency.specifier,
131
+ data: {
132
+ asyncType: null,
133
+ isESMImport: dependency.isESMImport,
134
+ key: dependency.specifier,
135
+ locs: []
136
+ }
137
+ };
138
+ const context = createDefaultContext({
139
+ allowHaste: false,
140
+ assetExts: new Set(resolver.assetExts ?? []),
141
+ customResolverOptions: {},
142
+ dev: true,
143
+ disableHierarchicalLookup: resolver.disableHierarchicalLookup ?? false,
144
+ doesFileExist: (path) => fileSystemLookup(path).type === "f",
145
+ extraNodeModules: resolver.extraNodeModules ?? null,
146
+ fileSystemLookup,
147
+ getPackage,
148
+ getPackageForModule: findClosestPackage,
149
+ isESMImport: dependency.isESMImport,
150
+ mainFields: resolver.resolverMainFields ?? [
151
+ "react-native",
152
+ "browser",
153
+ "main"
154
+ ],
155
+ nodeModulesPaths: resolver.nodeModulesPaths ?? [],
156
+ originModulePath: importer,
157
+ preferNativePlatform: true,
158
+ projectRoot: config.projectRoot,
159
+ resolveAsset: () => null,
160
+ resolveHasteModule: () => null,
161
+ resolveHastePackage: () => null,
162
+ resolveRequest: resolver.resolveRequest ?? null,
163
+ sourceExts: resolver.sourceExts ?? [
164
+ "js",
165
+ "jsx",
166
+ "json",
167
+ "ts",
168
+ "tsx"
169
+ ],
170
+ unstable_conditionNames: resolver.unstable_conditionNames ?? [],
171
+ unstable_conditionsByPlatform: resolver.unstable_conditionsByPlatform ?? {},
172
+ unstable_enablePackageExports: resolver.unstable_enablePackageExports ?? true,
173
+ unstable_logWarning: (message) => config.resolver?.unstable_logWarning?.(message)
174
+ }, dependencyDescriptor);
175
+ const result = metroResolve(context, dependency.specifier, platform);
176
+ if (result.type === "empty") return null;
177
+ if (result.type !== "sourceFile" || !result.filePath) return null;
178
+ const resolvedId = (0, import_node_fs.realpathSync)(result.filePath);
179
+ return {
180
+ specifier: dependency.specifier,
181
+ resolvedId,
182
+ external: resolvedId.includes(`${(0, import_node_path.join)("node_modules")}`)
183
+ };
184
+ }
185
+ };
186
+ }
187
+ function isCompilerSourceFile(path) {
188
+ return [
189
+ ".js",
190
+ ".jsx",
191
+ ".mjs",
192
+ ".cjs",
193
+ ".ts",
194
+ ".tsx"
195
+ ].includes((0, import_node_path.extname)(path));
196
+ }
@@ -0,0 +1,34 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
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, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var transformOptions_exports = {};
22
+ __export(transformOptions_exports, { composeMetroGetTransformOptions: () => composeMetroGetTransformOptions });
23
+ module.exports = __toCommonJS(transformOptions_exports);
24
+ function composeMetroGetTransformOptions(frontend, userGetTransformOptions) {
25
+ return async function(entryFiles, transformOptions, getDependencies) {
26
+ const userOptions = userGetTransformOptions ? await userGetTransformOptions.call(this, entryFiles, transformOptions, getDependencies) : { transform: {} };
27
+ await frontend.ensureValidCache({
28
+ ...transformOptions,
29
+ entryFiles,
30
+ transform: userOptions.transform ?? {}
31
+ });
32
+ return userOptions;
33
+ };
34
+ }
@@ -0,0 +1,146 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
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, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var transformer_exports = {};
22
+ __export(transformer_exports, {
23
+ createMetroCompilerTransformer: () => createMetroCompilerTransformer,
24
+ writeMetroCompilerTransformerBridge: () => writeMetroCompilerTransformerBridge
25
+ });
26
+ module.exports = __toCommonJS(transformer_exports);
27
+ var import_node_crypto = require("node:crypto");
28
+ var import_node_fs = require("node:fs");
29
+ var import_node_path = require("node:path");
30
+ var import_babel = require("./babel.cjs");
31
+ var import_compilerCache = require("./compilerCache.cjs");
32
+ var import_diagnostics = require("./diagnostics.cjs");
33
+ var import_metroResolver = require("./metroResolver.cjs");
34
+ var import_lowering = require("./lowering.cjs");
35
+ function createMetroCompilerTransformer(config) {
36
+ const moduleIdCache = /* @__PURE__ */ new Map();
37
+ const missWarned = /* @__PURE__ */ new Set();
38
+ function cacheModuleId(filename) {
39
+ let id = moduleIdCache.get(filename);
40
+ if (!id) {
41
+ const absolute = (0, import_node_path.isAbsolute)(filename) ? filename : (0, import_node_path.resolve)(config.projectRoot, filename);
42
+ try {
43
+ id = (0, import_node_fs.realpathSync)(absolute);
44
+ } catch {
45
+ id = absolute;
46
+ }
47
+ moduleIdCache.set(filename, id);
48
+ }
49
+ return id;
50
+ }
51
+ function planEligible(moduleId) {
52
+ return (0, import_metroResolver.isCompilerSourceFile)(moduleId) && !moduleId.includes(`${(0, import_node_path.join)("node_modules")}`) && !/(?:directStyleCSS|getCSSStylesAtomic)Compiled\.(?:c?js|mjs)$/.test(moduleId) && (0, import_node_fs.existsSync)(moduleId);
53
+ }
54
+ const runtimeLiteral = config.runtimeLiteral ?? "full";
55
+ const envLiterals = /* @__PURE__ */ new Map([["TAMAGUI_RUNTIME", runtimeLiteral]]);
56
+ if (config.didOutputCSSLiteral) {
57
+ envLiterals.set("TAMAGUI_DID_OUTPUT_CSS", config.didOutputCSSLiteral);
58
+ }
59
+ const inlineBuildLiterals = ({ types }) => ({ visitor: { MemberExpression(nodePath) {
60
+ const node = nodePath.node;
61
+ if (node.computed || !types.isIdentifier(node.property) || !types.isMemberExpression(node.object) || node.object.computed || !types.isIdentifier(node.object.object, { name: "process" }) || !types.isIdentifier(node.object.property, { name: "env" })) {
62
+ return;
63
+ }
64
+ const literal = envLiterals.get(node.property.name);
65
+ if (literal) nodePath.replaceWith(types.stringLiteral(literal));
66
+ } } });
67
+ return {
68
+ async transform(argsIn) {
69
+ const args = {
70
+ ...argsIn,
71
+ plugins: [...argsIn.plugins ?? [], inlineBuildLiterals]
72
+ };
73
+ const platform = typeof args.options.platform === "string" ? args.options.platform : "default";
74
+ const cache = new import_compilerCache.MetroCompilerCache((0, import_node_path.join)(config.cacheBaseRoot, platform));
75
+ let tamagui = {
76
+ cacheHit: false,
77
+ diagnostics: []
78
+ };
79
+ const moduleId = cacheModuleId(args.filename);
80
+ try {
81
+ const entry = await cache.read(moduleId, args.src, (reason, detail) => {
82
+ if (missWarned.has(moduleId) || !planEligible(moduleId)) return;
83
+ missWarned.add(moduleId);
84
+ const diagnostic = (0, import_diagnostics.metroDiagnostic)("metro/plan-miss", `Lowering plan lookup missed for ${moduleId} (${reason}${detail ? `: ${detail}` : ""}); module ships unlowered`, { moduleId });
85
+ tamagui.diagnostics.push(diagnostic);
86
+ console.warn((0, import_diagnostics.formatMetroCompilerDiagnostic)(diagnostic, config.projectRoot));
87
+ });
88
+ if (entry) {
89
+ try {
90
+ const lowered = await (0, import_lowering.applyMetroCompilerPlan)({
91
+ ...args,
92
+ filename: moduleId
93
+ }, entry.plan, config.originalBabelTransformerPath);
94
+ return {
95
+ ...lowered.compiled.result,
96
+ metadata: {
97
+ ...lowered.compiled.result.metadata,
98
+ tamagui: {
99
+ cacheHit: true,
100
+ diagnostics: entry.diagnostics,
101
+ lowering: lowered.lowering
102
+ }
103
+ }
104
+ };
105
+ } catch (error) {
106
+ const diagnostic = (0, import_diagnostics.metroDiagnostic)("metro/cache-corrupt", `Cached lowering plan for ${args.filename} could not be applied: ${error instanceof Error ? error.message : String(error)}`, { moduleId });
107
+ tamagui = {
108
+ cacheHit: true,
109
+ diagnostics: [...entry.diagnostics, diagnostic]
110
+ };
111
+ console.warn((0, import_diagnostics.formatMetroCompilerDiagnostic)(diagnostic, config.projectRoot));
112
+ }
113
+ }
114
+ } catch (error) {
115
+ if (!(error instanceof import_compilerCache.MetroCompilerCacheError)) throw error;
116
+ tamagui.diagnostics.push(error.diagnostic);
117
+ console.warn((0, import_diagnostics.formatMetroCompilerDiagnostic)(error.diagnostic, config.projectRoot));
118
+ }
119
+ const compiled = await (0, import_babel.compileWithUserBabel)(config.originalBabelTransformerPath, args);
120
+ return {
121
+ ...compiled.result,
122
+ metadata: {
123
+ ...compiled.result.metadata,
124
+ tamagui
125
+ }
126
+ };
127
+ },
128
+ getCacheKey() {
129
+ return (0, import_node_crypto.createHash)("sha256").update(`tamagui-metro-compiler-v${import_compilerCache.METRO_COMPILER_CACHE_VERSION}`).update("\0").update(runtimeLiteral).update("\0").update(config.didOutputCSSLiteral ?? "").update("\0").update((0, import_babel.userBabelCacheKey)(config.originalBabelTransformerPath)).digest("hex");
130
+ }
131
+ };
132
+ }
133
+ function writeMetroCompilerTransformerBridge(transformerFactoryPath, config) {
134
+ const serializedConfig = JSON.stringify(config);
135
+ const bridgeHash = (0, import_node_crypto.createHash)("sha256").update(transformerFactoryPath).update("\0").update(serializedConfig).digest("hex");
136
+ const directory = (0, import_node_path.join)(config.cacheBaseRoot, "bridge");
137
+ const bridgePath = (0, import_node_path.join)(directory, `${bridgeHash}.cjs`);
138
+ const temporaryPath = `${bridgePath}.${process.pid}.tmp`;
139
+ const source = `'use strict'
140
+ module.exports = require(${JSON.stringify(transformerFactoryPath)}).createMetroCompilerTransformer(${serializedConfig})
141
+ `;
142
+ (0, import_node_fs.mkdirSync)(directory, { recursive: true });
143
+ (0, import_node_fs.writeFileSync)(temporaryPath, source, "utf8");
144
+ (0, import_node_fs.renameSync)(temporaryPath, bridgePath);
145
+ return bridgePath;
146
+ }