@vxrn/vite-plugin-metro 1.2.89 → 1.2.90

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 (56) hide show
  1. package/dist/cjs/babel-plugins/import-meta-env-plugin.cjs +11 -0
  2. package/dist/cjs/babel-plugins/import-meta-env-plugin.js +9 -0
  3. package/dist/cjs/babel-plugins/import-meta-env-plugin.js.map +1 -1
  4. package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js +11 -0
  5. package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
  6. package/dist/cjs/index.cjs +3 -1
  7. package/dist/cjs/index.js +2 -1
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/index.native.js +3 -1
  10. package/dist/cjs/index.native.js.map +1 -1
  11. package/dist/cjs/plugins/metroPlugin.cjs +2 -0
  12. package/dist/cjs/plugins/metroPlugin.js +2 -1
  13. package/dist/cjs/plugins/metroPlugin.js.map +1 -1
  14. package/dist/cjs/plugins/metroPlugin.native.js +4 -2
  15. package/dist/cjs/plugins/metroPlugin.native.js.map +1 -1
  16. package/dist/cjs/utils/metroCacheManager.cjs +89 -0
  17. package/dist/cjs/utils/metroCacheManager.js +65 -0
  18. package/dist/cjs/utils/metroCacheManager.js.map +6 -0
  19. package/dist/cjs/utils/metroCacheManager.native.js +109 -0
  20. package/dist/cjs/utils/metroCacheManager.native.js.map +1 -0
  21. package/dist/esm/babel-plugins/import-meta-env-plugin.js +9 -0
  22. package/dist/esm/babel-plugins/import-meta-env-plugin.js.map +1 -1
  23. package/dist/esm/babel-plugins/import-meta-env-plugin.mjs +11 -0
  24. package/dist/esm/babel-plugins/import-meta-env-plugin.mjs.map +1 -1
  25. package/dist/esm/babel-plugins/import-meta-env-plugin.native.js +11 -0
  26. package/dist/esm/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
  27. package/dist/esm/index.js +2 -0
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/index.mjs +2 -1
  30. package/dist/esm/index.mjs.map +1 -1
  31. package/dist/esm/index.native.js +2 -1
  32. package/dist/esm/index.native.js.map +1 -1
  33. package/dist/esm/plugins/metroPlugin.js +2 -0
  34. package/dist/esm/plugins/metroPlugin.js.map +1 -1
  35. package/dist/esm/plugins/metroPlugin.mjs +2 -0
  36. package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
  37. package/dist/esm/plugins/metroPlugin.native.js +4 -2
  38. package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
  39. package/dist/esm/utils/metroCacheManager.js +51 -0
  40. package/dist/esm/utils/metroCacheManager.js.map +6 -0
  41. package/dist/esm/utils/metroCacheManager.mjs +66 -0
  42. package/dist/esm/utils/metroCacheManager.mjs.map +1 -0
  43. package/dist/esm/utils/metroCacheManager.native.js +83 -0
  44. package/dist/esm/utils/metroCacheManager.native.js.map +1 -0
  45. package/package.json +2 -2
  46. package/src/babel-plugins/import-meta-env-plugin.ts +22 -1
  47. package/src/index.ts +1 -0
  48. package/src/plugins/metroPlugin.ts +5 -0
  49. package/src/utils/metroCacheManager.ts +143 -0
  50. package/types/babel-plugins/import-meta-env-plugin.d.ts +1 -1
  51. package/types/babel-plugins/import-meta-env-plugin.d.ts.map +1 -1
  52. package/types/index.d.ts +1 -0
  53. package/types/index.d.ts.map +1 -1
  54. package/types/plugins/metroPlugin.d.ts.map +1 -1
  55. package/types/utils/metroCacheManager.d.ts +12 -0
  56. package/types/utils/metroCacheManager.d.ts.map +1 -0
@@ -0,0 +1,143 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync } from 'node:fs'
2
+ import { join } from 'node:path'
3
+ import type { ViteDevServer } from 'vite'
4
+ import { createDebugger } from '@vxrn/debug'
5
+
6
+ const { debug } = createDebugger('vite-plugin-metro:cache')
7
+
8
+ const CACHE_METADATA_FILE = '_vite_metro_metadata.json'
9
+
10
+ type CacheMetadata = {
11
+ lockfileHash: string
12
+ configHash: string
13
+ pluginVersion: string
14
+ }
15
+
16
+ /**
17
+ * Get Metro cache directory path
18
+ */
19
+ function getMetroCacheDir(root: string): string {
20
+ // Metro uses /tmp/metro-* by default, but we'll store our metadata in node_modules/.cache
21
+ return join(root, 'node_modules', '.cache', 'vite-plugin-metro')
22
+ }
23
+
24
+ /**
25
+ * Get paths to Metro's actual cache directories that need clearing
26
+ */
27
+ function getMetroCachePaths(root: string): string[] {
28
+ const paths: string[] = []
29
+
30
+ // node_modules/.cache locations
31
+ paths.push(join(root, 'node_modules', '.cache', 'metro'))
32
+ paths.push(join(root, 'node_modules', '.cache', 'babel-loader'))
33
+ paths.push(join(root, 'node_modules', '.cache', 'haste-map'))
34
+
35
+ return paths
36
+ }
37
+
38
+ /**
39
+ * Read cached metadata
40
+ */
41
+ function readCacheMetadata(cacheDir: string): CacheMetadata | null {
42
+ const metadataPath = join(cacheDir, CACHE_METADATA_FILE)
43
+ if (!existsSync(metadataPath)) return null
44
+
45
+ try {
46
+ return JSON.parse(readFileSync(metadataPath, 'utf-8'))
47
+ } catch {
48
+ return null
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Write cache metadata
54
+ */
55
+ function writeCacheMetadata(cacheDir: string, metadata: CacheMetadata): void {
56
+ if (!existsSync(cacheDir)) {
57
+ mkdirSync(cacheDir, { recursive: true })
58
+ }
59
+ writeFileSync(join(cacheDir, CACHE_METADATA_FILE), JSON.stringify(metadata, null, 2))
60
+ }
61
+
62
+ /**
63
+ * Clear Metro cache directories
64
+ */
65
+ function clearMetroCache(root: string): void {
66
+ const paths = getMetroCachePaths(root)
67
+
68
+ for (const cachePath of paths) {
69
+ if (existsSync(cachePath)) {
70
+ try {
71
+ rmSync(cachePath, { recursive: true, force: true })
72
+ debug?.(`Cleared cache: ${cachePath}`)
73
+ } catch (e) {
74
+ debug?.(`Failed to clear cache ${cachePath}: ${e}`)
75
+ }
76
+ }
77
+ }
78
+
79
+ // also set env var so Metro knows to reset on its own cache
80
+ process.env.METRO_RESET_CACHE = '1'
81
+ }
82
+
83
+ // current plugin version - bump when babel plugin changes
84
+ const PLUGIN_VERSION = '1'
85
+
86
+ /**
87
+ * Check if Metro cache needs to be cleared based on Vite's dep optimization metadata.
88
+ * This hooks into Vite's existing hash computation so we don't duplicate logic.
89
+ * Call this after Vite's depsOptimizer is initialized.
90
+ */
91
+ export function checkAndClearMetroCacheFromVite(
92
+ server: ViteDevServer,
93
+ logger: { info: (msg: string, opts?: { timestamp?: boolean }) => void }
94
+ ): boolean {
95
+ const { root } = server.config
96
+ const cacheDir = getMetroCacheDir(root)
97
+
98
+ // get Vite's computed hashes from the client environment's depsOptimizer
99
+ const depsOptimizer = server.environments.client?.depsOptimizer
100
+ if (!depsOptimizer) {
101
+ debug?.('No depsOptimizer available, skipping Metro cache check')
102
+ return false
103
+ }
104
+
105
+ const { lockfileHash, configHash } = depsOptimizer.metadata
106
+
107
+ const currentMetadata: CacheMetadata = {
108
+ lockfileHash,
109
+ configHash,
110
+ pluginVersion: PLUGIN_VERSION,
111
+ }
112
+
113
+ const cachedMetadata = readCacheMetadata(cacheDir)
114
+
115
+ let shouldClear = false
116
+ let reason = ''
117
+
118
+ if (!cachedMetadata) {
119
+ // first run, just write metadata
120
+ writeCacheMetadata(cacheDir, currentMetadata)
121
+ return false
122
+ }
123
+
124
+ if (cachedMetadata.pluginVersion !== PLUGIN_VERSION) {
125
+ shouldClear = true
126
+ reason = 'vite-plugin-metro was updated'
127
+ } else if (cachedMetadata.lockfileHash !== lockfileHash) {
128
+ shouldClear = true
129
+ reason = 'lockfile has changed'
130
+ } else if (cachedMetadata.configHash !== configHash) {
131
+ shouldClear = true
132
+ reason = 'vite config has changed'
133
+ }
134
+
135
+ if (shouldClear) {
136
+ logger.info(`Clearing Metro cache because ${reason}`, { timestamp: true })
137
+ clearMetroCache(root)
138
+ writeCacheMetadata(cacheDir, currentMetadata)
139
+ return true
140
+ }
141
+
142
+ return false
143
+ }
@@ -3,7 +3,7 @@ type PluginOptions = {
3
3
  env?: Record<string, string | boolean | undefined>;
4
4
  };
5
5
  /**
6
- * Babel plugin to replace `import.meta.env` and `import.meta.env.*` with env values.
6
+ * Babel plugin to replace `import.meta.env.*` and `process.env.*` with env values.
7
7
  *
8
8
  * Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, EXPO_OS, TAMAGUI_ENVIRONMENT)
9
9
  * are automatically injected based on the babel caller's platform.
@@ -1 +1 @@
1
- {"version":3,"file":"import-meta-env-plugin.d.ts","sourceRoot":"","sources":["../../src/babel-plugins/import-meta-env-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5C,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAA;CACnD,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,0HA8D9B,CAAA;AAEF,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"import-meta-env-plugin.d.ts","sourceRoot":"","sources":["../../src/babel-plugins/import-meta-env-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5C,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAA;CACnD,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,0HAmF9B,CAAA;AAEF,eAAe,mBAAmB,CAAA"}
package/types/index.d.ts CHANGED
@@ -3,4 +3,5 @@ export type { MetroPluginOptions } from './plugins/metroPlugin';
3
3
  export { expoManifestRequestHandlerPlugin } from './plugins/expoManifestRequestHandlerPlugin';
4
4
  export type { ExpoManifestRequestHandlerPluginPluginOptions } from './plugins/expoManifestRequestHandlerPlugin';
5
5
  export { getPlatformEnv, getPlatformEnvDefine, metroPlatformToViteEnvironment, type Platform, type PlatformEnv, type ViteEnvironment, } from './env/platformEnv';
6
+ export { checkAndClearMetroCacheFromVite } from './utils/metroCacheManager';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAA;AAC7F,YAAY,EAAE,6CAA6C,EAAE,MAAM,4CAA4C,CAAA;AAC/G,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAA;AAC7F,YAAY,EAAE,6CAA6C,EAAE,MAAM,4CAA4C,CAAA;AAC/G,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"metroPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/metroPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAUxC,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,OAAO,CAAA;AAMtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,sBAAsB,CAAC,EACnB,gBAAgB,GAChB,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,CAAA;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,oBAAoB,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAA;IAC5E;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,YAAY,CA0O1E"}
1
+ {"version":3,"file":"metroPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/metroPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAWxC,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,OAAO,CAAA;AAMtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,sBAAsB,CAAC,EACnB,gBAAgB,GAChB,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,CAAA;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,oBAAoB,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAA;IAC5E;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,YAAY,CA8O1E"}
@@ -0,0 +1,12 @@
1
+ import type { ViteDevServer } from 'vite';
2
+ /**
3
+ * Check if Metro cache needs to be cleared based on Vite's dep optimization metadata.
4
+ * This hooks into Vite's existing hash computation so we don't duplicate logic.
5
+ * Call this after Vite's depsOptimizer is initialized.
6
+ */
7
+ export declare function checkAndClearMetroCacheFromVite(server: ViteDevServer, logger: {
8
+ info: (msg: string, opts?: {
9
+ timestamp?: boolean;
10
+ }) => void;
11
+ }): boolean;
12
+ //# sourceMappingURL=metroCacheManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metroCacheManager.d.ts","sourceRoot":"","sources":["../../src/utils/metroCacheManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAmFzC;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;CAAE,GACtE,OAAO,CAiDT"}