@vxrn/vite-plugin-metro 1.2.89 → 1.2.91
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/babel-plugins/import-meta-env-plugin.cjs +11 -0
- package/dist/cjs/babel-plugins/import-meta-env-plugin.js +9 -0
- package/dist/cjs/babel-plugins/import-meta-env-plugin.js.map +1 -1
- package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js +11 -0
- package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
- package/dist/cjs/index.cjs +3 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.native.js +3 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/plugins/metroPlugin.cjs +2 -0
- package/dist/cjs/plugins/metroPlugin.js +2 -1
- package/dist/cjs/plugins/metroPlugin.js.map +1 -1
- package/dist/cjs/plugins/metroPlugin.native.js +4 -2
- package/dist/cjs/plugins/metroPlugin.native.js.map +1 -1
- package/dist/cjs/utils/metroCacheManager.cjs +89 -0
- package/dist/cjs/utils/metroCacheManager.js +65 -0
- package/dist/cjs/utils/metroCacheManager.js.map +6 -0
- package/dist/cjs/utils/metroCacheManager.native.js +109 -0
- package/dist/cjs/utils/metroCacheManager.native.js.map +1 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.js +9 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.js.map +1 -1
- package/dist/esm/babel-plugins/import-meta-env-plugin.mjs +11 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.mjs.map +1 -1
- package/dist/esm/babel-plugins/import-meta-env-plugin.native.js +11 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/plugins/metroPlugin.js +2 -0
- package/dist/esm/plugins/metroPlugin.js.map +1 -1
- package/dist/esm/plugins/metroPlugin.mjs +2 -0
- package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
- package/dist/esm/plugins/metroPlugin.native.js +4 -2
- package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
- package/dist/esm/utils/metroCacheManager.js +51 -0
- package/dist/esm/utils/metroCacheManager.js.map +6 -0
- package/dist/esm/utils/metroCacheManager.mjs +66 -0
- package/dist/esm/utils/metroCacheManager.mjs.map +1 -0
- package/dist/esm/utils/metroCacheManager.native.js +83 -0
- package/dist/esm/utils/metroCacheManager.native.js.map +1 -0
- package/package.json +2 -2
- package/src/babel-plugins/import-meta-env-plugin.ts +22 -1
- package/src/index.ts +1 -0
- package/src/plugins/metroPlugin.ts +5 -0
- package/src/utils/metroCacheManager.ts +143 -0
- package/types/babel-plugins/import-meta-env-plugin.d.ts +1 -1
- package/types/babel-plugins/import-meta-env-plugin.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/plugins/metroPlugin.d.ts.map +1 -1
- package/types/utils/metroCacheManager.d.ts +12 -0
- 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
|
|
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,
|
|
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
|
package/types/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|