source: frontend/node_modules/enhanced-resolve/lib/index.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 8.9 KB
Line 
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5
6"use strict";
7
8const memoize = require("./util/memoize");
9
10/** @typedef {import("./CachedInputFileSystem").BaseFileSystem} BaseFileSystem */
11/** @typedef {import("./PnpPlugin").PnpApiImpl} PnpApi */
12/** @typedef {import("./Resolver")} Resolver */
13/** @typedef {import("./Resolver").Context} Context */
14/** @typedef {import("./Resolver").FileSystem} FileSystem */
15/** @typedef {import("./Resolver").ResolveCallback} ResolveCallback */
16/** @typedef {import("./Resolver").ResolveContext} ResolveContext */
17/** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */
18/** @typedef {import("./Resolver").SyncFileSystem} SyncFileSystem */
19/** @typedef {import("./ResolverFactory").Plugin} Plugin */
20/** @typedef {import("./ResolverFactory").UserResolveOptions} ResolveOptions */
21
22/**
23 * @typedef {{
24 * (context: Context, path: string, request: string, resolveContext: ResolveContext, callback: ResolveCallback): void,
25 * (context: Context, path: string, request: string, callback: ResolveCallback): void,
26 * (path: string, request: string, resolveContext: ResolveContext, callback: ResolveCallback): void,
27 * (path: string, request: string, callback: ResolveCallback): void,
28 * }} ResolveFunctionAsync
29 */
30
31/**
32 * @typedef {{
33 * (context: Context, path: string, request: string, resolveContext?: ResolveContext): string | false,
34 * (path: string, request: string, resolveContext?: ResolveContext): string | false,
35 * }} ResolveFunction
36 */
37
38/**
39 * @typedef {{
40 * (context: Context, path: string, request: string, resolveContext?: ResolveContext): Promise<string | false>,
41 * (path: string, request: string, resolveContext?: ResolveContext): Promise<string | false>,
42 * }} ResolveFunctionPromise
43 */
44
45const getCachedFileSystem = memoize(() => require("./CachedInputFileSystem"));
46
47const getNodeFileSystem = memoize(() => {
48 const fs = require("graceful-fs");
49
50 const CachedInputFileSystem = getCachedFileSystem();
51
52 return new CachedInputFileSystem(fs, 4000);
53});
54const getNodeContext = memoize(() => ({
55 environments: ["node+es3+es5+process+native"],
56}));
57
58const getResolverFactory = memoize(() => require("./ResolverFactory"));
59
60const getAsyncResolver = memoize(() =>
61 getResolverFactory().createResolver({
62 conditionNames: ["node"],
63 extensions: [".js", ".json", ".node"],
64 fileSystem: getNodeFileSystem(),
65 }),
66);
67
68/**
69 * @type {ResolveFunctionAsync}
70 */
71const resolve =
72 /**
73 * @param {object | string} context context
74 * @param {string} path path
75 * @param {string | ResolveContext | ResolveCallback} request request
76 * @param {ResolveContext | ResolveCallback=} resolveContext resolve context
77 * @param {ResolveCallback=} callback callback
78 */
79 (context, path, request, resolveContext, callback) => {
80 if (typeof context === "string") {
81 callback = /** @type {ResolveCallback} */ (resolveContext);
82 resolveContext = /** @type {ResolveContext} */ (request);
83 request = path;
84 path = context;
85 context = getNodeContext();
86 }
87 if (typeof callback !== "function") {
88 callback = /** @type {ResolveCallback} */ (resolveContext);
89 }
90 getAsyncResolver().resolve(
91 context,
92 path,
93 /** @type {string} */ (request),
94 /** @type {ResolveContext} */ (resolveContext),
95 /** @type {ResolveCallback} */ (callback),
96 );
97 };
98
99const getSyncResolver = memoize(() =>
100 getResolverFactory().createResolver({
101 conditionNames: ["node"],
102 extensions: [".js", ".json", ".node"],
103 useSyncFileSystemCalls: true,
104 fileSystem: getNodeFileSystem(),
105 }),
106);
107
108/**
109 * @type {ResolveFunction}
110 */
111const resolveSync =
112 /**
113 * @param {object | string} context context
114 * @param {string} path path
115 * @param {string | ResolveContext | undefined} request request
116 * @param {ResolveContext=} resolveContext resolve context
117 * @returns {string | false} resolved path
118 */
119 (context, path, request, resolveContext) => {
120 if (typeof context === "string") {
121 resolveContext = /** @type {ResolveContext} */ (request);
122 request = path;
123 path = context;
124 context = getNodeContext();
125 }
126 return getSyncResolver().resolveSync(
127 context,
128 path,
129 /** @type {string} */ (request),
130 /** @type {ResolveContext} */ (resolveContext),
131 );
132 };
133
134/**
135 * @type {ResolveFunctionPromise}
136 */
137const resolvePromise =
138 /**
139 * @param {object | string} context context
140 * @param {string} path path
141 * @param {string | ResolveContext | undefined} request request
142 * @param {ResolveContext=} resolveContext resolve context
143 * @returns {Promise<string | false>} resolved path
144 */
145 (context, path, request, resolveContext) => {
146 if (typeof context === "string") {
147 resolveContext = /** @type {ResolveContext} */ (request);
148 request = path;
149 path = context;
150 context = getNodeContext();
151 }
152 return getAsyncResolver().resolvePromise(
153 context,
154 path,
155 /** @type {string} */ (request),
156 /** @type {ResolveContext} */ (resolveContext),
157 );
158 };
159
160/** @typedef {Omit<ResolveOptions, "fileSystem"> & Partial<Pick<ResolveOptions, "fileSystem">>} ResolveOptionsOptionalFS */
161
162/**
163 * @param {ResolveOptionsOptionalFS} options Resolver options
164 * @returns {ResolveFunctionAsync} Resolver function
165 */
166function create(options) {
167 const resolver = getResolverFactory().createResolver({
168 fileSystem: getNodeFileSystem(),
169 ...options,
170 });
171 /**
172 * @param {object | string} context Custom context
173 * @param {string} path Base path
174 * @param {string | ResolveContext | ResolveCallback} request String to resolve
175 * @param {ResolveContext | ResolveCallback=} resolveContext Resolve context
176 * @param {ResolveCallback=} callback Result callback
177 */
178 return function create(context, path, request, resolveContext, callback) {
179 if (typeof context === "string") {
180 callback = /** @type {ResolveCallback} */ (resolveContext);
181 resolveContext = /** @type {ResolveContext} */ (request);
182 request = path;
183 path = context;
184 context = getNodeContext();
185 }
186 if (typeof callback !== "function") {
187 callback = /** @type {ResolveCallback} */ (resolveContext);
188 }
189 resolver.resolve(
190 context,
191 path,
192 /** @type {string} */ (request),
193 /** @type {ResolveContext} */ (resolveContext),
194 callback,
195 );
196 };
197}
198
199/**
200 * @param {ResolveOptionsOptionalFS} options Resolver options
201 * @returns {ResolveFunction} Resolver function
202 */
203function createSync(options) {
204 const resolver = getResolverFactory().createResolver({
205 useSyncFileSystemCalls: true,
206 fileSystem: getNodeFileSystem(),
207 ...options,
208 });
209 /**
210 * @param {object | string} context custom context
211 * @param {string} path base path
212 * @param {string | ResolveContext | undefined} request request to resolve
213 * @param {ResolveContext=} resolveContext Resolve context
214 * @returns {string | false} Resolved path or false
215 */
216 return function createSync(context, path, request, resolveContext) {
217 if (typeof context === "string") {
218 resolveContext = /** @type {ResolveContext} */ (request);
219 request = path;
220 path = context;
221 context = getNodeContext();
222 }
223 return resolver.resolveSync(
224 context,
225 path,
226 /** @type {string} */ (request),
227 /** @type {ResolveContext} */ (resolveContext),
228 );
229 };
230}
231
232/**
233 * @param {ResolveOptionsOptionalFS} options Resolver options
234 * @returns {ResolveFunctionPromise} Resolver function
235 */
236function createPromise(options) {
237 const resolver = getResolverFactory().createResolver({
238 fileSystem: getNodeFileSystem(),
239 ...options,
240 });
241 /**
242 * @param {object | string} context Custom context
243 * @param {string} path Base path
244 * @param {string | ResolveContext | undefined} request String to resolve
245 * @param {ResolveContext=} resolveContext Resolve context
246 * @returns {Promise<string | false>} resolved path
247 */
248 return function createPromise(context, path, request, resolveContext) {
249 if (typeof context === "string") {
250 resolveContext = /** @type {ResolveContext} */ (request);
251 request = path;
252 path = context;
253 context = getNodeContext();
254 }
255 return resolver.resolvePromise(
256 context,
257 path,
258 /** @type {string} */ (request),
259 /** @type {ResolveContext} */ (resolveContext),
260 );
261 };
262}
263
264/**
265 * @template A
266 * @template B
267 * @param {A} obj input a
268 * @param {B} exports input b
269 * @returns {A & B} merged
270 */
271const mergeExports = (obj, exports) => {
272 const descriptors = Object.getOwnPropertyDescriptors(exports);
273 Object.defineProperties(obj, descriptors);
274 return /** @type {A & B} */ (Object.freeze(obj));
275};
276
277module.exports = mergeExports(resolve, {
278 get sync() {
279 return resolveSync;
280 },
281 get promise() {
282 return resolvePromise;
283 },
284 create: mergeExports(create, {
285 get sync() {
286 return createSync;
287 },
288 get promise() {
289 return createPromise;
290 },
291 }),
292 get ResolverFactory() {
293 return getResolverFactory();
294 },
295 get CachedInputFileSystem() {
296 return getCachedFileSystem();
297 },
298 get CloneBasenamePlugin() {
299 return require("./CloneBasenamePlugin");
300 },
301 get LogInfoPlugin() {
302 return require("./LogInfoPlugin");
303 },
304 get TsconfigPathsPlugin() {
305 return require("./TsconfigPathsPlugin");
306 },
307 get forEachBail() {
308 return require("./forEachBail");
309 },
310});
Note: See TracBrowser for help on using the repository browser.