@expo/cli 54.1.0-canary-20251023-4c86f95 → 55.0.0-canary-20251118-8f7ee64

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 (52) hide show
  1. package/build/bin/cli +1 -1
  2. package/build/src/api/rest/cache/ResponseCache.js +3 -1
  3. package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
  4. package/build/src/export/exportStaticAsync.js +30 -2
  5. package/build/src/export/exportStaticAsync.js.map +1 -1
  6. package/build/src/export/saveAssets.js +10 -0
  7. package/build/src/export/saveAssets.js.map +1 -1
  8. package/build/src/start/interface/commandsTable.js.map +1 -1
  9. package/build/src/start/interface/startInterface.js +3 -0
  10. package/build/src/start/interface/startInterface.js.map +1 -1
  11. package/build/src/start/platforms/android/AndroidDeviceManager.js +2 -7
  12. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  13. package/build/src/start/platforms/android/adb.js +0 -6
  14. package/build/src/start/platforms/android/adb.js.map +1 -1
  15. package/build/src/start/server/MCP.js +15 -4
  16. package/build/src/start/server/MCP.js.map +1 -1
  17. package/build/src/start/server/metro/MetroBundlerDevServer.js +41 -36
  18. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  19. package/build/src/start/server/metro/createServerComponentsMiddleware.js +16 -16
  20. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
  21. package/build/src/start/server/metro/createServerRouteMiddleware.js +7 -29
  22. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  23. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +3 -1
  24. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
  25. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js +17 -0
  26. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -0
  27. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  28. package/build/src/start/server/metro/instantiateMetro.js +14 -10
  29. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  30. package/build/src/start/server/metro/resolveLoader.js +65 -0
  31. package/build/src/start/server/metro/resolveLoader.js.map +1 -0
  32. package/build/src/start/server/metro/withMetroMultiPlatform.js +25 -26
  33. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  34. package/build/src/start/server/middleware/DataLoaderModuleMiddleware.js.map +1 -1
  35. package/build/src/start/server/middleware/inspector/CdpClient.js +2 -0
  36. package/build/src/start/server/middleware/inspector/CdpClient.js.map +1 -1
  37. package/build/src/start/server/type-generation/routes.js +3 -1
  38. package/build/src/start/server/type-generation/routes.js.map +1 -1
  39. package/build/src/start/startAsync.js +11 -8
  40. package/build/src/start/startAsync.js.map +1 -1
  41. package/build/src/utils/env.js +0 -3
  42. package/build/src/utils/env.js.map +1 -1
  43. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  44. package/build/src/utils/telemetry/utils/context.js +1 -1
  45. package/package.json +21 -23
  46. package/static/template/[...rsc]+api.ts +1 -1
  47. package/build/src/start/server/metro/createExpoMetroResolver.js +0 -265
  48. package/build/src/start/server/metro/createExpoMetroResolver.js.map +0 -1
  49. package/build/src/start/server/metro/createJResolver.js +0 -201
  50. package/build/src/start/server/metro/createJResolver.js.map +0 -1
  51. package/build/src/start/server/metro/formatFileCandidates.js +0 -84
  52. package/build/src/start/server/metro/formatFileCandidates.js.map +0 -1
@@ -1,201 +0,0 @@
1
- /**
2
- * Copyright © 2023 650 Industries.
3
- * Copyright (c) Meta Platforms, Inc. and affiliates.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- *
8
- * Fork of the jest resolver but with additional settings for Metro and pnp removed.
9
- * https://github.com/jestjs/jest/blob/d1a2ed7fea4bdc19836274cd810c8360e3ab62f3/packages/jest-resolve/src/defaultResolver.ts#L1
10
- */ "use strict";
11
- Object.defineProperty(exports, "__esModule", {
12
- value: true
13
- });
14
- Object.defineProperty(exports, "default", {
15
- enumerable: true,
16
- get: function() {
17
- return _default;
18
- }
19
- });
20
- function _assert() {
21
- const data = /*#__PURE__*/ _interop_require_default(require("assert"));
22
- _assert = function() {
23
- return data;
24
- };
25
- return data;
26
- }
27
- function _path() {
28
- const data = require("path");
29
- _path = function() {
30
- return data;
31
- };
32
- return data;
33
- }
34
- function _resolve() {
35
- const data = require("resolve");
36
- _resolve = function() {
37
- return data;
38
- };
39
- return data;
40
- }
41
- function _resolveexports() {
42
- const data = /*#__PURE__*/ _interop_require_wildcard(require("resolve.exports"));
43
- _resolveexports = function() {
44
- return data;
45
- };
46
- return data;
47
- }
48
- function _interop_require_default(obj) {
49
- return obj && obj.__esModule ? obj : {
50
- default: obj
51
- };
52
- }
53
- function _getRequireWildcardCache(nodeInterop) {
54
- if (typeof WeakMap !== "function") return null;
55
- var cacheBabelInterop = new WeakMap();
56
- var cacheNodeInterop = new WeakMap();
57
- return (_getRequireWildcardCache = function(nodeInterop) {
58
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
59
- })(nodeInterop);
60
- }
61
- function _interop_require_wildcard(obj, nodeInterop) {
62
- if (!nodeInterop && obj && obj.__esModule) {
63
- return obj;
64
- }
65
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
66
- return {
67
- default: obj
68
- };
69
- }
70
- var cache = _getRequireWildcardCache(nodeInterop);
71
- if (cache && cache.has(obj)) {
72
- return cache.get(obj);
73
- }
74
- var newObj = {
75
- __proto__: null
76
- };
77
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
78
- for(var key in obj){
79
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
80
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
81
- if (desc && (desc.get || desc.set)) {
82
- Object.defineProperty(newObj, key, desc);
83
- } else {
84
- newObj[key] = obj[key];
85
- }
86
- }
87
- }
88
- newObj.default = obj;
89
- if (cache) {
90
- cache.set(obj, newObj);
91
- }
92
- return newObj;
93
- }
94
- const defaultResolver = (path, { enablePackageExports, blockList = [], ...options })=>{
95
- // @ts-expect-error
96
- const resolveOptions = {
97
- ...options,
98
- preserveSymlinks: options.preserveSymlinks,
99
- defaultResolver
100
- };
101
- // resolveSync dereferences symlinks to ensure we don't create a separate
102
- // module instance depending on how it was referenced.
103
- const result = (0, _resolve().sync)(enablePackageExports ? getPathInModule(path, resolveOptions) : path, {
104
- ...resolveOptions,
105
- preserveSymlinks: !options.preserveSymlinks
106
- });
107
- return result;
108
- };
109
- const _default = defaultResolver;
110
- /*
111
- * helper functions
112
- */ function getPathInModule(path, options) {
113
- if (shouldIgnoreRequestForExports(path)) {
114
- return path;
115
- }
116
- const segments = path.split('/');
117
- let moduleName = segments.shift();
118
- if (!moduleName) {
119
- return path;
120
- }
121
- if (moduleName.startsWith('@')) {
122
- moduleName = `${moduleName}/${segments.shift()}`;
123
- }
124
- // self-reference
125
- const closestPackageJson = findClosestPackageJson(options.basedir, options);
126
- if (closestPackageJson) {
127
- const pkg = options.readPackageSync(options.readFileSync, closestPackageJson);
128
- (0, _assert().default)(pkg, 'package.json should be read by `readPackageSync`');
129
- // Added support for the package.json "imports" field (#-prefixed paths)
130
- if (path.startsWith('#')) {
131
- const resolved = _resolveexports().imports(pkg, path, createResolveOptions(options.conditions));
132
- if (resolved) {
133
- // TODO: Should we attempt to resolve every path in the array?
134
- return (0, _path().resolve)((0, _path().dirname)(closestPackageJson), resolved[0]);
135
- }
136
- // NOTE: resolve.imports would have thrown by this point.
137
- return path;
138
- }
139
- if (pkg.name === moduleName) {
140
- const resolved = _resolveexports().exports(pkg, segments.join('/') || '.', createResolveOptions(options.conditions));
141
- if (resolved) {
142
- return (0, _path().resolve)((0, _path().dirname)(closestPackageJson), resolved[0]);
143
- }
144
- if (pkg.exports) {
145
- throw new Error("`exports` exists, but no results - this is a bug in Expo CLI's Metro resolver. Report an issue: https://github.com/expo/expo/issues");
146
- }
147
- }
148
- }
149
- let packageJsonPath = '';
150
- try {
151
- packageJsonPath = (0, _resolve().sync)(`${moduleName}/package.json`, options);
152
- } catch {
153
- // ignore if package.json cannot be found
154
- }
155
- if (!packageJsonPath) {
156
- return path;
157
- }
158
- const pkg = options.readPackageSync(options.readFileSync, packageJsonPath);
159
- (0, _assert().default)(pkg, 'package.json should be read by `readPackageSync`');
160
- const resolved = _resolveexports().exports(pkg, segments.join('/') || '.', createResolveOptions(options.conditions));
161
- if (resolved) {
162
- return (0, _path().resolve)((0, _path().dirname)(packageJsonPath), resolved[0]);
163
- }
164
- if (pkg.exports) {
165
- throw new Error("`exports` exists, but no results - this is a bug in Expo CLI's Metro resolver. Report an issue: https://github.com/expo/expo/issues");
166
- }
167
- return path;
168
- }
169
- function createResolveOptions(conditions) {
170
- return conditions ? {
171
- conditions,
172
- unsafe: true
173
- } : {
174
- browser: false,
175
- require: true
176
- };
177
- }
178
- // if it's a relative import or an absolute path, imports/exports are ignored
179
- const shouldIgnoreRequestForExports = (path)=>path.startsWith('.') || (0, _path().isAbsolute)(path);
180
- // adapted from
181
- // https://github.com/lukeed/escalade/blob/2477005062cdbd8407afc90d3f48f4930354252b/src/sync.js
182
- function findClosestPackageJson(start, options) {
183
- let dir = (0, _path().resolve)('.', start);
184
- if (!options.isDirectory(dir)) {
185
- dir = (0, _path().dirname)(dir);
186
- }
187
- while(true){
188
- const pkgJsonFile = (0, _path().resolve)(dir, './package.json');
189
- const hasPackageJson = options.pathExists(pkgJsonFile);
190
- if (hasPackageJson) {
191
- return pkgJsonFile;
192
- }
193
- const prevDir = dir;
194
- dir = (0, _path().dirname)(dir);
195
- if (prevDir === dir) {
196
- return undefined;
197
- }
198
- }
199
- }
200
-
201
- //# sourceMappingURL=createJResolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/createJResolver.ts"],"sourcesContent":["/**\n * Copyright © 2023 650 Industries.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Fork of the jest resolver but with additional settings for Metro and pnp removed.\n * https://github.com/jestjs/jest/blob/d1a2ed7fea4bdc19836274cd810c8360e3ab62f3/packages/jest-resolve/src/defaultResolver.ts#L1\n */\nimport type { JSONObject as PackageJSON } from '@expo/json-file';\nimport type { CustomResolutionContext } from '@expo/metro/metro-resolver';\nimport assert from 'assert';\nimport { dirname, isAbsolute, resolve as pathResolve } from 'path';\nimport { sync as resolveSync, SyncOpts as UpstreamResolveOptions } from 'resolve';\nimport * as resolve from 'resolve.exports';\n\n/**\n * Allows transforming parsed `package.json` contents.\n *\n * @param pkg - Parsed `package.json` contents.\n * @param file - Path to `package.json` file.\n * @param dir - Directory that contains the `package.json`.\n *\n * @returns Transformed `package.json` contents.\n */\ntype PackageFilter = (pkg: PackageJSON, file: string, dir: string) => PackageJSON;\n\n/**\n * Allows transforming a path within a package.\n *\n * @param pkg - Parsed `package.json` contents.\n * @param path - Path being resolved.\n * @param relativePath - Path relative from the `package.json` location.\n *\n * @returns Relative path that will be joined from the `package.json` location.\n */\ntype PathFilter = (pkg: PackageJSON, path: string, relativePath: string) => string;\n\n// TODO(@kitten): This probably has overlap with an @expo/metro type\ntype ResolverOptions = {\n /** Directory to begin resolving from. */\n basedir: string;\n /** List of export conditions. */\n conditions?: string[];\n /** Instance of default resolver. */\n defaultResolver: typeof defaultResolver;\n /** List of file extensions to search in order. */\n extensions?: string[];\n /**\n * List of directory names to be looked up for modules recursively.\n *\n * @defaultValue\n * The default is `['node_modules']`.\n */\n moduleDirectory?: string[];\n /**\n * List of `require.paths` to use if nothing is found in `node_modules`.\n *\n * @defaultValue\n * The default is `undefined`.\n */\n paths?: string[];\n /** Allows transforming parsed `package.json` contents. */\n packageFilter?: PackageFilter;\n /** Allows transforms a path within a package. */\n pathFilter?: PathFilter;\n /** Current root directory. */\n rootDir?: string;\n\n enablePackageExports?: boolean;\n\n blockList: RegExp[];\n\n getPackageForModule: CustomResolutionContext['getPackageForModule'];\n} & Pick<\n UpstreamResolveOptions,\n | 'readPackageSync'\n | 'realpathSync'\n | 'moduleDirectory'\n | 'extensions'\n | 'preserveSymlinks'\n | 'includeCoreModules'\n>;\n\ntype UpstreamResolveOptionsWithConditions = UpstreamResolveOptions &\n ResolverOptions & {\n pathExists: (file: string) => boolean;\n };\n\nconst defaultResolver = (\n path: string,\n {\n enablePackageExports,\n blockList = [],\n ...options\n }: Omit<ResolverOptions, 'defaultResolver' | 'getPackageForModule'> & {\n isDirectory: (file: string) => boolean;\n isFile: (file: string) => boolean;\n pathExists: (file: string) => boolean;\n }\n): string => {\n // @ts-expect-error\n const resolveOptions: UpstreamResolveOptionsWithConditions = {\n ...options,\n preserveSymlinks: options.preserveSymlinks,\n defaultResolver,\n };\n\n // resolveSync dereferences symlinks to ensure we don't create a separate\n // module instance depending on how it was referenced.\n const result = resolveSync(enablePackageExports ? getPathInModule(path, resolveOptions) : path, {\n ...resolveOptions,\n preserveSymlinks: !options.preserveSymlinks,\n });\n\n return result;\n};\n\nexport default defaultResolver;\n\n/*\n * helper functions\n */\n\nfunction getPathInModule(path: string, options: UpstreamResolveOptionsWithConditions): string {\n if (shouldIgnoreRequestForExports(path)) {\n return path;\n }\n\n const segments = path.split('/');\n\n let moduleName = segments.shift();\n\n if (!moduleName) {\n return path;\n }\n\n if (moduleName.startsWith('@')) {\n moduleName = `${moduleName}/${segments.shift()}`;\n }\n\n // self-reference\n const closestPackageJson = findClosestPackageJson(options.basedir, options);\n if (closestPackageJson) {\n const pkg = options.readPackageSync!(options.readFileSync!, closestPackageJson);\n assert(pkg, 'package.json should be read by `readPackageSync`');\n\n // Added support for the package.json \"imports\" field (#-prefixed paths)\n if (path.startsWith('#')) {\n const resolved = resolve.imports(pkg, path, createResolveOptions(options.conditions));\n if (resolved) {\n // TODO: Should we attempt to resolve every path in the array?\n return pathResolve(dirname(closestPackageJson), resolved[0]);\n }\n // NOTE: resolve.imports would have thrown by this point.\n return path;\n }\n\n if (pkg.name === moduleName) {\n const resolved = resolve.exports(\n pkg,\n (segments.join('/') || '.') as resolve.Exports.Entry,\n createResolveOptions(options.conditions)\n );\n\n if (resolved) {\n return pathResolve(dirname(closestPackageJson), resolved[0]);\n }\n\n if (pkg.exports) {\n throw new Error(\n \"`exports` exists, but no results - this is a bug in Expo CLI's Metro resolver. Report an issue: https://github.com/expo/expo/issues\"\n );\n }\n }\n }\n\n let packageJsonPath = '';\n\n try {\n packageJsonPath = resolveSync(`${moduleName}/package.json`, options);\n } catch {\n // ignore if package.json cannot be found\n }\n\n if (!packageJsonPath) {\n return path;\n }\n\n const pkg = options.readPackageSync!(options.readFileSync!, packageJsonPath);\n assert(pkg, 'package.json should be read by `readPackageSync`');\n\n const resolved = resolve.exports(\n pkg,\n (segments.join('/') || '.') as resolve.Exports.Entry,\n createResolveOptions(options.conditions)\n );\n\n if (resolved) {\n return pathResolve(dirname(packageJsonPath), resolved[0]);\n }\n\n if (pkg.exports) {\n throw new Error(\n \"`exports` exists, but no results - this is a bug in Expo CLI's Metro resolver. Report an issue: https://github.com/expo/expo/issues\"\n );\n }\n\n return path;\n}\n\nfunction createResolveOptions(conditions: string[] | undefined): resolve.Options {\n return conditions\n ? { conditions, unsafe: true }\n : // no conditions were passed - let's assume this is Jest internal and it should be `require`\n { browser: false, require: true };\n}\n\n// if it's a relative import or an absolute path, imports/exports are ignored\nconst shouldIgnoreRequestForExports = (path: string) => path.startsWith('.') || isAbsolute(path);\n\n// adapted from\n// https://github.com/lukeed/escalade/blob/2477005062cdbd8407afc90d3f48f4930354252b/src/sync.js\nfunction findClosestPackageJson(\n start: string,\n options: UpstreamResolveOptionsWithConditions\n): string | undefined {\n let dir = pathResolve('.', start);\n if (!options.isDirectory!(dir)) {\n dir = dirname(dir);\n }\n\n while (true) {\n const pkgJsonFile = pathResolve(dir, './package.json');\n const hasPackageJson = options.pathExists!(pkgJsonFile);\n\n if (hasPackageJson) {\n return pkgJsonFile;\n }\n\n const prevDir = dir;\n dir = dirname(dir);\n\n if (prevDir === dir) {\n return undefined;\n }\n }\n}\n"],"names":["defaultResolver","path","enablePackageExports","blockList","options","resolveOptions","preserveSymlinks","result","resolveSync","getPathInModule","shouldIgnoreRequestForExports","segments","split","moduleName","shift","startsWith","closestPackageJson","findClosestPackageJson","basedir","pkg","readPackageSync","readFileSync","assert","resolved","resolve","imports","createResolveOptions","conditions","pathResolve","dirname","name","exports","join","Error","packageJsonPath","unsafe","browser","require","isAbsolute","start","dir","isDirectory","pkgJsonFile","hasPackageJson","pathExists","prevDir","undefined"],"mappings":"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"}
@@ -1,84 +0,0 @@
1
- /**
2
- * Copyright © 2022 650 Industries.
3
- * Copyright (c) Meta Platforms, Inc. and affiliates.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- *
8
- * A fork of my proposed Metro change https://github.com/facebook/metro/pull/1036/files
9
- */ "use strict";
10
- Object.defineProperty(exports, "__esModule", {
11
- value: true
12
- });
13
- Object.defineProperty(exports, "formatFileCandidates", {
14
- enumerable: true,
15
- get: function() {
16
- return formatFileCandidates;
17
- }
18
- });
19
- function _path() {
20
- const data = /*#__PURE__*/ _interop_require_default(require("path"));
21
- _path = function() {
22
- return data;
23
- };
24
- return data;
25
- }
26
- function _interop_require_default(obj) {
27
- return obj && obj.__esModule ? obj : {
28
- default: obj
29
- };
30
- }
31
- function groupExtensions(exts) {
32
- // Reverse the extensions and split into parts
33
- const extParts = exts.map((ext)=>ext.split('.').reverse());
34
- // Find the maximum depth of extension parts
35
- const maxDepth = Math.max(...extParts.map((parts)=>parts.length));
36
- // Initialize groups based on the max depth
37
- const groups = Array.from({
38
- length: maxDepth
39
- }, ()=>new Set());
40
- extParts.forEach((parts)=>{
41
- parts.forEach((part, i)=>{
42
- // Add parts to the corresponding group based on their depth
43
- groups[i].add(part);
44
- });
45
- });
46
- // Cycle groups and remove duplicates that appear forwards
47
- groups.forEach((group, index)=>{
48
- // Remove duplicates that appear forwards
49
- // NOTE: This doesn't support extensions like `.native.native.js`
50
- groups.forEach((otherGroup, otherIndex)=>{
51
- if (index < otherIndex) {
52
- otherGroup.forEach((part)=>group.delete(part));
53
- }
54
- });
55
- });
56
- // Convert sets back to arrays and reverse groups to correct order
57
- return groups.map((group)=>Array.from(group)).reverse();
58
- }
59
- function createMatcherPatternForExtensions(exts) {
60
- let formatted = '';
61
- if (exts.length) {
62
- // Apply grouping function
63
- const groups = groupExtensions(exts);
64
- formatted += groups.map((group, index)=>{
65
- return index < groups.length - 1 ? `(${group.map((ext)=>`.${ext}`).join('|')})?` : `.(${group.join('|')})`;
66
- }).join('');
67
- }
68
- return formatted;
69
- }
70
- function formatFileCandidates(candidates, allowIndex = false) {
71
- if (candidates.type === 'asset') {
72
- return candidates.name;
73
- }
74
- let formatted = candidates.filePathPrefix;
75
- if (allowIndex) {
76
- formatted += `(${_path().default.sep}index)?`;
77
- }
78
- const extensions = candidates.candidateExts// Drop additional dots, the first character if it is a dot, and remove empty strings.
79
- .map((ext)=>ext.replace(/\.+/g, '.').replace(/^\./g, '')).filter(Boolean);
80
- formatted += createMatcherPatternForExtensions(extensions);
81
- return formatted;
82
- }
83
-
84
- //# sourceMappingURL=formatFileCandidates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/formatFileCandidates.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * A fork of my proposed Metro change https://github.com/facebook/metro/pull/1036/files\n */\n\nimport type { FileCandidates } from '@expo/metro/metro-resolver';\nimport path from 'path';\n\nfunction groupExtensions(exts: readonly string[]): string[][] {\n // Reverse the extensions and split into parts\n const extParts = exts.map((ext) => ext.split('.').reverse());\n\n // Find the maximum depth of extension parts\n const maxDepth = Math.max(...extParts.map((parts) => parts.length));\n\n // Initialize groups based on the max depth\n const groups = Array.from({ length: maxDepth }, () => new Set<string>());\n\n extParts.forEach((parts) => {\n parts.forEach((part, i) => {\n // Add parts to the corresponding group based on their depth\n groups[i].add(part);\n });\n });\n\n // Cycle groups and remove duplicates that appear forwards\n groups.forEach((group, index) => {\n // Remove duplicates that appear forwards\n // NOTE: This doesn't support extensions like `.native.native.js`\n groups.forEach((otherGroup, otherIndex) => {\n if (index < otherIndex) {\n otherGroup.forEach((part) => group.delete(part));\n }\n });\n });\n\n // Convert sets back to arrays and reverse groups to correct order\n return groups.map((group) => Array.from(group)).reverse();\n}\n\nfunction createMatcherPatternForExtensions(exts: readonly string[]): string {\n let formatted = '';\n\n if (exts.length) {\n // Apply grouping function\n const groups = groupExtensions(exts);\n\n formatted += groups\n .map((group, index) => {\n return index < groups.length - 1\n ? `(${group.map((ext) => `.${ext}`).join('|')})?`\n : `.(${group.join('|')})`;\n })\n .join('');\n }\n\n return formatted;\n}\n\nexport function formatFileCandidates(\n candidates: FileCandidates,\n allowIndex: boolean = false\n): string {\n if (candidates.type === 'asset') {\n return candidates.name;\n }\n\n let formatted = candidates.filePathPrefix;\n\n if (allowIndex) {\n formatted += `(${path.sep}index)?`;\n }\n\n const extensions = candidates.candidateExts\n // Drop additional dots, the first character if it is a dot, and remove empty strings.\n .map((ext) => ext.replace(/\\.+/g, '.').replace(/^\\./g, ''))\n .filter(Boolean);\n\n formatted += createMatcherPatternForExtensions(extensions);\n\n return formatted;\n}\n"],"names":["formatFileCandidates","groupExtensions","exts","extParts","map","ext","split","reverse","maxDepth","Math","max","parts","length","groups","Array","from","Set","forEach","part","i","add","group","index","otherGroup","otherIndex","delete","createMatcherPatternForExtensions","formatted","join","candidates","allowIndex","type","name","filePathPrefix","path","sep","extensions","candidateExts","replace","filter","Boolean"],"mappings":"AAAA;;;;;;;;CAQC;;;;+BAwDeA;;;eAAAA;;;;gEArDC;;;;;;;;;;;AAEjB,SAASC,gBAAgBC,IAAuB;IAC9C,8CAA8C;IAC9C,MAAMC,WAAWD,KAAKE,GAAG,CAAC,CAACC,MAAQA,IAAIC,KAAK,CAAC,KAAKC,OAAO;IAEzD,4CAA4C;IAC5C,MAAMC,WAAWC,KAAKC,GAAG,IAAIP,SAASC,GAAG,CAAC,CAACO,QAAUA,MAAMC,MAAM;IAEjE,2CAA2C;IAC3C,MAAMC,SAASC,MAAMC,IAAI,CAAC;QAAEH,QAAQJ;IAAS,GAAG,IAAM,IAAIQ;IAE1Db,SAASc,OAAO,CAAC,CAACN;QAChBA,MAAMM,OAAO,CAAC,CAACC,MAAMC;YACnB,4DAA4D;YAC5DN,MAAM,CAACM,EAAE,CAACC,GAAG,CAACF;QAChB;IACF;IAEA,0DAA0D;IAC1DL,OAAOI,OAAO,CAAC,CAACI,OAAOC;QACrB,yCAAyC;QACzC,iEAAiE;QACjET,OAAOI,OAAO,CAAC,CAACM,YAAYC;YAC1B,IAAIF,QAAQE,YAAY;gBACtBD,WAAWN,OAAO,CAAC,CAACC,OAASG,MAAMI,MAAM,CAACP;YAC5C;QACF;IACF;IAEA,kEAAkE;IAClE,OAAOL,OAAOT,GAAG,CAAC,CAACiB,QAAUP,MAAMC,IAAI,CAACM,QAAQd,OAAO;AACzD;AAEA,SAASmB,kCAAkCxB,IAAuB;IAChE,IAAIyB,YAAY;IAEhB,IAAIzB,KAAKU,MAAM,EAAE;QACf,0BAA0B;QAC1B,MAAMC,SAASZ,gBAAgBC;QAE/ByB,aAAad,OACVT,GAAG,CAAC,CAACiB,OAAOC;YACX,OAAOA,QAAQT,OAAOD,MAAM,GAAG,IAC3B,CAAC,CAAC,EAAES,MAAMjB,GAAG,CAAC,CAACC,MAAQ,CAAC,CAAC,EAAEA,KAAK,EAAEuB,IAAI,CAAC,KAAK,EAAE,CAAC,GAC/C,CAAC,EAAE,EAAEP,MAAMO,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,GACCA,IAAI,CAAC;IACV;IAEA,OAAOD;AACT;AAEO,SAAS3B,qBACd6B,UAA0B,EAC1BC,aAAsB,KAAK;IAE3B,IAAID,WAAWE,IAAI,KAAK,SAAS;QAC/B,OAAOF,WAAWG,IAAI;IACxB;IAEA,IAAIL,YAAYE,WAAWI,cAAc;IAEzC,IAAIH,YAAY;QACdH,aAAa,CAAC,CAAC,EAAEO,eAAI,CAACC,GAAG,CAAC,OAAO,CAAC;IACpC;IAEA,MAAMC,aAAaP,WAAWQ,aAAa,AACzC,sFAAsF;KACrFjC,GAAG,CAAC,CAACC,MAAQA,IAAIiC,OAAO,CAAC,QAAQ,KAAKA,OAAO,CAAC,QAAQ,KACtDC,MAAM,CAACC;IAEVb,aAAaD,kCAAkCU;IAE/C,OAAOT;AACT"}