@module-federation/vite 1.15.4 → 1.16.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.
@@ -0,0 +1,358 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
23
+ let fs = require("fs");
24
+ let module$1 = require("module");
25
+ let pathe = require("pathe");
26
+ pathe = __toESM(pathe);
27
+ //#region src/utils/logger.ts
28
+ const MODULE_FEDERATION_LOG_PREFIX = "[Module Federation]";
29
+ function formatModuleFederationMessage(message) {
30
+ return `${MODULE_FEDERATION_LOG_PREFIX} ${message}`;
31
+ }
32
+ function createModuleFederationError(message) {
33
+ return new Error(formatModuleFederationMessage(message));
34
+ }
35
+ function toConsoleArgs(message, rest = []) {
36
+ if (typeof message === "string") return [formatModuleFederationMessage(message), ...rest];
37
+ if (message === void 0) return [MODULE_FEDERATION_LOG_PREFIX, ...rest];
38
+ return [
39
+ MODULE_FEDERATION_LOG_PREFIX,
40
+ message,
41
+ ...rest
42
+ ];
43
+ }
44
+ const moduleFederationConsole = {
45
+ log(message, ...rest) {
46
+ console.log(...toConsoleArgs(message, rest));
47
+ },
48
+ warn(message, ...rest) {
49
+ console.warn(...toConsoleArgs(message, rest));
50
+ },
51
+ error(message, ...rest) {
52
+ console.error(...toConsoleArgs(message, rest));
53
+ }
54
+ };
55
+ moduleFederationConsole.log;
56
+ const mfWarn = moduleFederationConsole.warn;
57
+ const mfError = moduleFederationConsole.error;
58
+ //#endregion
59
+ //#region src/utils/packageUtils.ts
60
+ const dependencyPresenceCache = /* @__PURE__ */ new Map();
61
+ let packageDetectionCwd;
62
+ function getDependencyCacheKey(cwd, dependencyName) {
63
+ return `${cwd}:${dependencyName}`;
64
+ }
65
+ function setPackageDetectionCwd(cwd) {
66
+ packageDetectionCwd = cwd;
67
+ }
68
+ function getPackageDetectionCwd() {
69
+ return packageDetectionCwd || process.cwd();
70
+ }
71
+ const DEFAULT_EXPORT_CONDITIONS = [
72
+ "browser",
73
+ "import",
74
+ "module",
75
+ "default",
76
+ "require"
77
+ ];
78
+ function resolveExportsEntry(exportsField, conditions = DEFAULT_EXPORT_CONDITIONS) {
79
+ if (typeof exportsField === "string") return exportsField;
80
+ if (!exportsField || typeof exportsField !== "object") return void 0;
81
+ const record = exportsField;
82
+ const rootExport = record["."];
83
+ if (rootExport) return resolveExportsEntry(rootExport);
84
+ for (const condition of conditions) {
85
+ const target = resolveExportsEntry(record[condition], conditions);
86
+ if (target) return target;
87
+ }
88
+ for (const target of Object.values(record)) {
89
+ const resolved = resolveExportsEntry(target, conditions);
90
+ if (resolved) return resolved;
91
+ }
92
+ }
93
+ function getPackageExportsTarget(pkg, packageName, exportsField) {
94
+ if (typeof exportsField === "string") return pkg === packageName ? exportsField : void 0;
95
+ if (!exportsField || typeof exportsField !== "object") return void 0;
96
+ const record = exportsField;
97
+ const subpath = pkg === packageName ? "." : `.${pkg.slice(packageName.length)}`;
98
+ if (subpath !== ".") return record[subpath];
99
+ return record["."] ?? (!Object.keys(record).some((key) => key.startsWith(".")) ? record : void 0);
100
+ }
101
+ /**
102
+ * Escaping rules:
103
+ * Convert using the format __${mapping}__, where _ and $ are not allowed in npm package names but can be used in variable names.
104
+ * @ => 1
105
+ * / => 2
106
+ * - => 3
107
+ * . => 4
108
+ */
109
+ /**
110
+ * Encodes a package name into a valid file name.
111
+ * @param {string} name - The package name, e.g., "@scope/xx-xx.xx".
112
+ * @returns {string} - The encoded file name.
113
+ */
114
+ function packageNameEncode(name) {
115
+ if (typeof name !== "string") throw createModuleFederationError("A string package name is required");
116
+ return name.replace(/@/g, "_mf_0_").replace(/\//g, "_mf_1_").replace(/-/g, "_mf_2_").replace(/\./g, "_mf_3_");
117
+ }
118
+ /**
119
+ * Decodes an encoded file name back to the original package name.
120
+ * @param {string} encoded - The encoded file name, e.g., "_mf_0_scope_mf_1_xx_mf_2_xx_mf_3_xx".
121
+ * @returns {string} - The decoded package name.
122
+ */
123
+ function packageNameDecode(encoded) {
124
+ if (typeof encoded !== "string") throw createModuleFederationError("A string encoded file name is required");
125
+ return encoded.replace(/_mf_0_/g, "@").replace(/_mf_1_/g, "/").replace(/_mf_2_/g, "-").replace(/_mf_3_/g, ".");
126
+ }
127
+ /**
128
+ * Removes any subpath from an npm package specifier and returns the package name only.
129
+ * @param {string} packageString - The package specifier, e.g., "@scope/pkg/runtime" or "react/jsx-runtime".
130
+ * @returns {string} - The base npm package name.
131
+ */
132
+ function getPackageName(packageString) {
133
+ const match = packageString.match(/^(?:@[^/]+\/)?[^/]+/);
134
+ return match ? match[0] : packageString;
135
+ }
136
+ function getPackageNameFromNodeModulePath(source) {
137
+ const normalized = source.replace(/\\/g, "/");
138
+ const nodeModulesIndex = normalized.lastIndexOf("/node_modules/");
139
+ if (nodeModulesIndex < 0) return;
140
+ const parts = normalized.slice(nodeModulesIndex + 14).split("/");
141
+ if (!parts[0]) return;
142
+ if (parts[0].startsWith("@")) return parts[1] ? `${parts[0]}/${parts[1]}` : void 0;
143
+ return parts[0];
144
+ }
145
+ function getInstalledPackageJson(pkg, opts) {
146
+ const cwd = opts?.cwd || getPackageDetectionCwd();
147
+ const packageName = opts?.packageName || getPackageName(pkg);
148
+ const tryReadPackageJson = (packageJsonPath) => {
149
+ if (!(0, fs.existsSync)(packageJsonPath)) return void 0;
150
+ try {
151
+ return {
152
+ path: packageJsonPath,
153
+ dir: pathe.default.dirname(packageJsonPath),
154
+ packageJson: JSON.parse((0, fs.readFileSync)(packageJsonPath, "utf-8"))
155
+ };
156
+ } catch {
157
+ return;
158
+ }
159
+ };
160
+ const findPackageInPnpmStore = (startDir) => {
161
+ let currentDir = startDir;
162
+ const rootDir = pathe.default.parse(currentDir).root;
163
+ while (true) {
164
+ const pnpmStoreDir = pathe.default.join(currentDir, "node_modules", ".pnpm");
165
+ if ((0, fs.existsSync)(pnpmStoreDir)) try {
166
+ for (const entry of (0, fs.readdirSync)(pnpmStoreDir, { withFileTypes: true })) {
167
+ if (!entry.isDirectory()) continue;
168
+ const candidate = tryReadPackageJson(pathe.default.join(pnpmStoreDir, entry.name, "node_modules", packageName, "package.json"));
169
+ if (candidate?.packageJson.name === packageName) return candidate;
170
+ }
171
+ } catch {}
172
+ if (currentDir === rootDir) break;
173
+ currentDir = pathe.default.dirname(currentDir);
174
+ }
175
+ };
176
+ try {
177
+ const projectRequire = (0, module$1.createRequire)(new URL(`file://${pathe.default.join(cwd, "package.json")}`));
178
+ let resolvedPath;
179
+ if (opts?.fromResolvedEntry) resolvedPath = opts.fromResolvedEntry;
180
+ else try {
181
+ resolvedPath = projectRequire.resolve(pkg);
182
+ } catch {
183
+ resolvedPath = projectRequire.resolve(packageName);
184
+ }
185
+ let currentDir = pathe.default.dirname(resolvedPath);
186
+ const rootDir = pathe.default.parse(currentDir).root;
187
+ while (true) {
188
+ const packageJsonPath = pathe.default.join(currentDir, "package.json");
189
+ if ((0, fs.existsSync)(packageJsonPath)) {
190
+ const packageJsonContent = (0, fs.readFileSync)(packageJsonPath, "utf-8");
191
+ try {
192
+ const packageJson = JSON.parse(packageJsonContent);
193
+ if (packageJson.name === packageName) return {
194
+ path: packageJsonPath,
195
+ dir: currentDir,
196
+ packageJson
197
+ };
198
+ } catch (error) {
199
+ if (!(error instanceof SyntaxError)) throw error;
200
+ }
201
+ }
202
+ if (currentDir === rootDir) break;
203
+ currentDir = pathe.default.dirname(currentDir);
204
+ }
205
+ } catch {
206
+ let currentDir = cwd;
207
+ const rootDir = pathe.default.parse(currentDir).root;
208
+ while (true) {
209
+ const directCandidate = tryReadPackageJson(pathe.default.join(currentDir, "node_modules", packageName, "package.json"));
210
+ if (directCandidate?.packageJson.name === packageName) return directCandidate;
211
+ if (currentDir === rootDir) break;
212
+ currentDir = pathe.default.dirname(currentDir);
213
+ }
214
+ return findPackageInPnpmStore(cwd);
215
+ }
216
+ }
217
+ function getInstalledPackageEntry(pkg, opts) {
218
+ const installed = getInstalledPackageJson(pkg, opts);
219
+ if (!installed) return void 0;
220
+ const cwd = opts?.cwd || getPackageDetectionCwd();
221
+ const packageName = opts?.packageName || getPackageName(pkg);
222
+ if (pkg !== packageName && opts?.resolveSubpathWithRequire !== false) try {
223
+ return (0, module$1.createRequire)(new URL(`file://${pathe.default.join(cwd, "package.json")}`)).resolve(pkg);
224
+ } catch {}
225
+ const packageJson = installed.packageJson;
226
+ const explicitEntry = resolveExportsEntry(getPackageExportsTarget(pkg, packageName, packageJson.exports), opts?.conditions) || (typeof packageJson.module === "string" ? packageJson.module : void 0) || (typeof packageJson.main === "string" ? packageJson.main : void 0) || "index.js";
227
+ return pathe.default.join(installed.dir, explicitEntry);
228
+ }
229
+ /**
230
+ * Detect whether the current runtime is Vite 8+ by checking for a Vite version flag
231
+ * on the plugin hook context, with Rolldown metadata kept as a compatibility fallback.
232
+ */
233
+ function getIsRolldown(ctx) {
234
+ const viteVersion = ctx?.meta?.viteVersion;
235
+ const viteMajor = Number(String(viteVersion ?? "").split(".")[0]);
236
+ return Number.isFinite(viteMajor) && viteMajor >= 8 || !!ctx?.meta?.rolldownVersion;
237
+ }
238
+ /** Walk up from Vite `config.root` (Nuxt may point at `.nuxt` cache dirs). */
239
+ function isNuxtProjectRoot(root) {
240
+ let dir = root;
241
+ for (let i = 0; i < 8; i++) {
242
+ if (hasPackageDependency("nuxt", dir) || hasPackageDependency("nuxt-nightly", dir)) return true;
243
+ const parent = pathe.default.dirname(dir);
244
+ if (parent === dir) break;
245
+ dir = parent;
246
+ }
247
+ return false;
248
+ }
249
+ function hasPackageDependency(dependencyName, cwd = packageDetectionCwd || process.cwd()) {
250
+ const cacheKey = getDependencyCacheKey(cwd, dependencyName);
251
+ const cached = dependencyPresenceCache.get(cacheKey);
252
+ if (cached !== void 0) return cached;
253
+ try {
254
+ const packageJson = JSON.parse((0, fs.readFileSync)(pathe.default.join(cwd, "package.json"), "utf8"));
255
+ const hasDependency = [
256
+ packageJson.dependencies,
257
+ packageJson.devDependencies,
258
+ packageJson.peerDependencies,
259
+ packageJson.optionalDependencies
260
+ ].some((deps) => !!deps?.[dependencyName]);
261
+ dependencyPresenceCache.set(cacheKey, hasDependency);
262
+ return hasDependency;
263
+ } catch {
264
+ dependencyPresenceCache.set(cacheKey, false);
265
+ return false;
266
+ }
267
+ }
268
+ //#endregion
269
+ Object.defineProperty(exports, "__toESM", {
270
+ enumerable: true,
271
+ get: function() {
272
+ return __toESM;
273
+ }
274
+ });
275
+ Object.defineProperty(exports, "createModuleFederationError", {
276
+ enumerable: true,
277
+ get: function() {
278
+ return createModuleFederationError;
279
+ }
280
+ });
281
+ Object.defineProperty(exports, "getInstalledPackageEntry", {
282
+ enumerable: true,
283
+ get: function() {
284
+ return getInstalledPackageEntry;
285
+ }
286
+ });
287
+ Object.defineProperty(exports, "getInstalledPackageJson", {
288
+ enumerable: true,
289
+ get: function() {
290
+ return getInstalledPackageJson;
291
+ }
292
+ });
293
+ Object.defineProperty(exports, "getIsRolldown", {
294
+ enumerable: true,
295
+ get: function() {
296
+ return getIsRolldown;
297
+ }
298
+ });
299
+ Object.defineProperty(exports, "getPackageDetectionCwd", {
300
+ enumerable: true,
301
+ get: function() {
302
+ return getPackageDetectionCwd;
303
+ }
304
+ });
305
+ Object.defineProperty(exports, "getPackageName", {
306
+ enumerable: true,
307
+ get: function() {
308
+ return getPackageName;
309
+ }
310
+ });
311
+ Object.defineProperty(exports, "getPackageNameFromNodeModulePath", {
312
+ enumerable: true,
313
+ get: function() {
314
+ return getPackageNameFromNodeModulePath;
315
+ }
316
+ });
317
+ Object.defineProperty(exports, "hasPackageDependency", {
318
+ enumerable: true,
319
+ get: function() {
320
+ return hasPackageDependency;
321
+ }
322
+ });
323
+ Object.defineProperty(exports, "isNuxtProjectRoot", {
324
+ enumerable: true,
325
+ get: function() {
326
+ return isNuxtProjectRoot;
327
+ }
328
+ });
329
+ Object.defineProperty(exports, "mfError", {
330
+ enumerable: true,
331
+ get: function() {
332
+ return mfError;
333
+ }
334
+ });
335
+ Object.defineProperty(exports, "mfWarn", {
336
+ enumerable: true,
337
+ get: function() {
338
+ return mfWarn;
339
+ }
340
+ });
341
+ Object.defineProperty(exports, "packageNameDecode", {
342
+ enumerable: true,
343
+ get: function() {
344
+ return packageNameDecode;
345
+ }
346
+ });
347
+ Object.defineProperty(exports, "packageNameEncode", {
348
+ enumerable: true,
349
+ get: function() {
350
+ return packageNameEncode;
351
+ }
352
+ });
353
+ Object.defineProperty(exports, "setPackageDetectionCwd", {
354
+ enumerable: true,
355
+ get: function() {
356
+ return setPackageDetectionCwd;
357
+ }
358
+ });
@@ -0,0 +1,250 @@
1
+ import { createRequire } from "node:module";
2
+ import { existsSync, readFileSync, readdirSync } from "fs";
3
+ import { createRequire as createRequire$1 } from "module";
4
+ import path from "pathe";
5
+ //#region \0rolldown/runtime.js
6
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
7
+ //#endregion
8
+ //#region src/utils/logger.ts
9
+ const MODULE_FEDERATION_LOG_PREFIX = "[Module Federation]";
10
+ function formatModuleFederationMessage(message) {
11
+ return `${MODULE_FEDERATION_LOG_PREFIX} ${message}`;
12
+ }
13
+ function createModuleFederationError(message) {
14
+ return new Error(formatModuleFederationMessage(message));
15
+ }
16
+ function toConsoleArgs(message, rest = []) {
17
+ if (typeof message === "string") return [formatModuleFederationMessage(message), ...rest];
18
+ if (message === void 0) return [MODULE_FEDERATION_LOG_PREFIX, ...rest];
19
+ return [
20
+ MODULE_FEDERATION_LOG_PREFIX,
21
+ message,
22
+ ...rest
23
+ ];
24
+ }
25
+ const moduleFederationConsole = {
26
+ log(message, ...rest) {
27
+ console.log(...toConsoleArgs(message, rest));
28
+ },
29
+ warn(message, ...rest) {
30
+ console.warn(...toConsoleArgs(message, rest));
31
+ },
32
+ error(message, ...rest) {
33
+ console.error(...toConsoleArgs(message, rest));
34
+ }
35
+ };
36
+ moduleFederationConsole.log;
37
+ const mfWarn = moduleFederationConsole.warn;
38
+ const mfError = moduleFederationConsole.error;
39
+ //#endregion
40
+ //#region src/utils/packageUtils.ts
41
+ const dependencyPresenceCache = /* @__PURE__ */ new Map();
42
+ let packageDetectionCwd;
43
+ function getDependencyCacheKey(cwd, dependencyName) {
44
+ return `${cwd}:${dependencyName}`;
45
+ }
46
+ function setPackageDetectionCwd(cwd) {
47
+ packageDetectionCwd = cwd;
48
+ }
49
+ function getPackageDetectionCwd() {
50
+ return packageDetectionCwd || process.cwd();
51
+ }
52
+ const DEFAULT_EXPORT_CONDITIONS = [
53
+ "browser",
54
+ "import",
55
+ "module",
56
+ "default",
57
+ "require"
58
+ ];
59
+ function resolveExportsEntry(exportsField, conditions = DEFAULT_EXPORT_CONDITIONS) {
60
+ if (typeof exportsField === "string") return exportsField;
61
+ if (!exportsField || typeof exportsField !== "object") return void 0;
62
+ const record = exportsField;
63
+ const rootExport = record["."];
64
+ if (rootExport) return resolveExportsEntry(rootExport);
65
+ for (const condition of conditions) {
66
+ const target = resolveExportsEntry(record[condition], conditions);
67
+ if (target) return target;
68
+ }
69
+ for (const target of Object.values(record)) {
70
+ const resolved = resolveExportsEntry(target, conditions);
71
+ if (resolved) return resolved;
72
+ }
73
+ }
74
+ function getPackageExportsTarget(pkg, packageName, exportsField) {
75
+ if (typeof exportsField === "string") return pkg === packageName ? exportsField : void 0;
76
+ if (!exportsField || typeof exportsField !== "object") return void 0;
77
+ const record = exportsField;
78
+ const subpath = pkg === packageName ? "." : `.${pkg.slice(packageName.length)}`;
79
+ if (subpath !== ".") return record[subpath];
80
+ return record["."] ?? (!Object.keys(record).some((key) => key.startsWith(".")) ? record : void 0);
81
+ }
82
+ /**
83
+ * Escaping rules:
84
+ * Convert using the format __${mapping}__, where _ and $ are not allowed in npm package names but can be used in variable names.
85
+ * @ => 1
86
+ * / => 2
87
+ * - => 3
88
+ * . => 4
89
+ */
90
+ /**
91
+ * Encodes a package name into a valid file name.
92
+ * @param {string} name - The package name, e.g., "@scope/xx-xx.xx".
93
+ * @returns {string} - The encoded file name.
94
+ */
95
+ function packageNameEncode(name) {
96
+ if (typeof name !== "string") throw createModuleFederationError("A string package name is required");
97
+ return name.replace(/@/g, "_mf_0_").replace(/\//g, "_mf_1_").replace(/-/g, "_mf_2_").replace(/\./g, "_mf_3_");
98
+ }
99
+ /**
100
+ * Decodes an encoded file name back to the original package name.
101
+ * @param {string} encoded - The encoded file name, e.g., "_mf_0_scope_mf_1_xx_mf_2_xx_mf_3_xx".
102
+ * @returns {string} - The decoded package name.
103
+ */
104
+ function packageNameDecode(encoded) {
105
+ if (typeof encoded !== "string") throw createModuleFederationError("A string encoded file name is required");
106
+ return encoded.replace(/_mf_0_/g, "@").replace(/_mf_1_/g, "/").replace(/_mf_2_/g, "-").replace(/_mf_3_/g, ".");
107
+ }
108
+ /**
109
+ * Removes any subpath from an npm package specifier and returns the package name only.
110
+ * @param {string} packageString - The package specifier, e.g., "@scope/pkg/runtime" or "react/jsx-runtime".
111
+ * @returns {string} - The base npm package name.
112
+ */
113
+ function getPackageName(packageString) {
114
+ const match = packageString.match(/^(?:@[^/]+\/)?[^/]+/);
115
+ return match ? match[0] : packageString;
116
+ }
117
+ function getPackageNameFromNodeModulePath(source) {
118
+ const normalized = source.replace(/\\/g, "/");
119
+ const nodeModulesIndex = normalized.lastIndexOf("/node_modules/");
120
+ if (nodeModulesIndex < 0) return;
121
+ const parts = normalized.slice(nodeModulesIndex + 14).split("/");
122
+ if (!parts[0]) return;
123
+ if (parts[0].startsWith("@")) return parts[1] ? `${parts[0]}/${parts[1]}` : void 0;
124
+ return parts[0];
125
+ }
126
+ function getInstalledPackageJson(pkg, opts) {
127
+ const cwd = opts?.cwd || getPackageDetectionCwd();
128
+ const packageName = opts?.packageName || getPackageName(pkg);
129
+ const tryReadPackageJson = (packageJsonPath) => {
130
+ if (!existsSync(packageJsonPath)) return void 0;
131
+ try {
132
+ return {
133
+ path: packageJsonPath,
134
+ dir: path.dirname(packageJsonPath),
135
+ packageJson: JSON.parse(readFileSync(packageJsonPath, "utf-8"))
136
+ };
137
+ } catch {
138
+ return;
139
+ }
140
+ };
141
+ const findPackageInPnpmStore = (startDir) => {
142
+ let currentDir = startDir;
143
+ const rootDir = path.parse(currentDir).root;
144
+ while (true) {
145
+ const pnpmStoreDir = path.join(currentDir, "node_modules", ".pnpm");
146
+ if (existsSync(pnpmStoreDir)) try {
147
+ for (const entry of readdirSync(pnpmStoreDir, { withFileTypes: true })) {
148
+ if (!entry.isDirectory()) continue;
149
+ const candidate = tryReadPackageJson(path.join(pnpmStoreDir, entry.name, "node_modules", packageName, "package.json"));
150
+ if (candidate?.packageJson.name === packageName) return candidate;
151
+ }
152
+ } catch {}
153
+ if (currentDir === rootDir) break;
154
+ currentDir = path.dirname(currentDir);
155
+ }
156
+ };
157
+ try {
158
+ const projectRequire = createRequire$1(new URL(`file://${path.join(cwd, "package.json")}`));
159
+ let resolvedPath;
160
+ if (opts?.fromResolvedEntry) resolvedPath = opts.fromResolvedEntry;
161
+ else try {
162
+ resolvedPath = projectRequire.resolve(pkg);
163
+ } catch {
164
+ resolvedPath = projectRequire.resolve(packageName);
165
+ }
166
+ let currentDir = path.dirname(resolvedPath);
167
+ const rootDir = path.parse(currentDir).root;
168
+ while (true) {
169
+ const packageJsonPath = path.join(currentDir, "package.json");
170
+ if (existsSync(packageJsonPath)) {
171
+ const packageJsonContent = readFileSync(packageJsonPath, "utf-8");
172
+ try {
173
+ const packageJson = JSON.parse(packageJsonContent);
174
+ if (packageJson.name === packageName) return {
175
+ path: packageJsonPath,
176
+ dir: currentDir,
177
+ packageJson
178
+ };
179
+ } catch (error) {
180
+ if (!(error instanceof SyntaxError)) throw error;
181
+ }
182
+ }
183
+ if (currentDir === rootDir) break;
184
+ currentDir = path.dirname(currentDir);
185
+ }
186
+ } catch {
187
+ let currentDir = cwd;
188
+ const rootDir = path.parse(currentDir).root;
189
+ while (true) {
190
+ const directCandidate = tryReadPackageJson(path.join(currentDir, "node_modules", packageName, "package.json"));
191
+ if (directCandidate?.packageJson.name === packageName) return directCandidate;
192
+ if (currentDir === rootDir) break;
193
+ currentDir = path.dirname(currentDir);
194
+ }
195
+ return findPackageInPnpmStore(cwd);
196
+ }
197
+ }
198
+ function getInstalledPackageEntry(pkg, opts) {
199
+ const installed = getInstalledPackageJson(pkg, opts);
200
+ if (!installed) return void 0;
201
+ const cwd = opts?.cwd || getPackageDetectionCwd();
202
+ const packageName = opts?.packageName || getPackageName(pkg);
203
+ if (pkg !== packageName && opts?.resolveSubpathWithRequire !== false) try {
204
+ return createRequire$1(new URL(`file://${path.join(cwd, "package.json")}`)).resolve(pkg);
205
+ } catch {}
206
+ const packageJson = installed.packageJson;
207
+ const explicitEntry = resolveExportsEntry(getPackageExportsTarget(pkg, packageName, packageJson.exports), opts?.conditions) || (typeof packageJson.module === "string" ? packageJson.module : void 0) || (typeof packageJson.main === "string" ? packageJson.main : void 0) || "index.js";
208
+ return path.join(installed.dir, explicitEntry);
209
+ }
210
+ /**
211
+ * Detect whether the current runtime is Vite 8+ by checking for a Vite version flag
212
+ * on the plugin hook context, with Rolldown metadata kept as a compatibility fallback.
213
+ */
214
+ function getIsRolldown(ctx) {
215
+ const viteVersion = ctx?.meta?.viteVersion;
216
+ const viteMajor = Number(String(viteVersion ?? "").split(".")[0]);
217
+ return Number.isFinite(viteMajor) && viteMajor >= 8 || !!ctx?.meta?.rolldownVersion;
218
+ }
219
+ /** Walk up from Vite `config.root` (Nuxt may point at `.nuxt` cache dirs). */
220
+ function isNuxtProjectRoot(root) {
221
+ let dir = root;
222
+ for (let i = 0; i < 8; i++) {
223
+ if (hasPackageDependency("nuxt", dir) || hasPackageDependency("nuxt-nightly", dir)) return true;
224
+ const parent = path.dirname(dir);
225
+ if (parent === dir) break;
226
+ dir = parent;
227
+ }
228
+ return false;
229
+ }
230
+ function hasPackageDependency(dependencyName, cwd = packageDetectionCwd || process.cwd()) {
231
+ const cacheKey = getDependencyCacheKey(cwd, dependencyName);
232
+ const cached = dependencyPresenceCache.get(cacheKey);
233
+ if (cached !== void 0) return cached;
234
+ try {
235
+ const packageJson = JSON.parse(readFileSync(path.join(cwd, "package.json"), "utf8"));
236
+ const hasDependency = [
237
+ packageJson.dependencies,
238
+ packageJson.devDependencies,
239
+ packageJson.peerDependencies,
240
+ packageJson.optionalDependencies
241
+ ].some((deps) => !!deps?.[dependencyName]);
242
+ dependencyPresenceCache.set(cacheKey, hasDependency);
243
+ return hasDependency;
244
+ } catch {
245
+ dependencyPresenceCache.set(cacheKey, false);
246
+ return false;
247
+ }
248
+ }
249
+ //#endregion
250
+ export { getPackageName as a, isNuxtProjectRoot as c, setPackageDetectionCwd as d, createModuleFederationError as f, __require as h, getPackageDetectionCwd as i, packageNameDecode as l, mfWarn as m, getInstalledPackageJson as n, getPackageNameFromNodeModulePath as o, mfError as p, getIsRolldown as r, hasPackageDependency as s, getInstalledPackageEntry as t, packageNameEncode as u };