enhanced-resolve
Advanced tools
Comparing version 5.13.0 to 5.14.0
@@ -62,3 +62,3 @@ /* | ||
) { | ||
const remainingRequest = innerRequest.substr(item.name.length); | ||
const remainingRequest = innerRequest.slice(item.name.length); | ||
const resolveWithAlias = (alias, callback) => { | ||
@@ -65,0 +65,0 @@ if (alias === false) { |
@@ -66,3 +66,3 @@ /* | ||
const relativePath = | ||
"." + path.substr(result.directory.length).replace(/\\/g, "/"); | ||
"." + path.slice(result.directory.length).replace(/\\/g, "/"); | ||
const obj = { | ||
@@ -69,0 +69,0 @@ ...request, |
@@ -165,3 +165,3 @@ /* | ||
if (p < 0) return null; | ||
return directory.substr(0, p || 1); | ||
return directory.slice(0, p || 1); | ||
} | ||
@@ -168,0 +168,0 @@ |
@@ -39,8 +39,14 @@ /* | ||
if (!requestPath || !requestPath.endsWith(extension)) return callback(); | ||
const resolve = (alias, callback) => { | ||
resolver.doResolve( | ||
const isAliasString = typeof alias === "string"; | ||
const resolve = (alias, callback, index) => { | ||
const newRequest = `${requestPath.slice( | ||
0, | ||
-extension.length | ||
)}${alias}`; | ||
return resolver.doResolve( | ||
target, | ||
{ | ||
...request, | ||
request: `${requestPath.slice(0, -extension.length)}${alias}`, | ||
request: newRequest, | ||
fullySpecified: true | ||
@@ -50,3 +56,20 @@ }, | ||
resolveContext, | ||
callback | ||
(err, result) => { | ||
// Throw error if we are on the last alias (for multiple aliases) and it failed, always throw if we are not an array or we have only one alias | ||
if (!isAliasString && index) { | ||
if (index !== this.options.alias.length) { | ||
if (resolveContext.log) { | ||
resolveContext.log( | ||
`Failed to alias from extension alias with mapping '${extension}' to '${alias}' for '${newRequest}': ${err}` | ||
); | ||
} | ||
return callback(null, result); | ||
} | ||
return callback(err, result); | ||
} else { | ||
callback(err, result); | ||
} | ||
} | ||
); | ||
@@ -61,3 +84,3 @@ }; | ||
}; | ||
if (typeof alias === "string") { | ||
if (isAliasString) { | ||
resolve(alias, stoppingCallback); | ||
@@ -64,0 +87,0 @@ } else if (alias.length > 1) { |
@@ -14,9 +14,13 @@ /* | ||
let loop = undefined; | ||
iterator(array[i++], (err, result) => { | ||
if (err || result !== undefined || i >= array.length) { | ||
return callback(err, result); | ||
} | ||
if (loop === false) while (next()); | ||
loop = true; | ||
}); | ||
iterator( | ||
array[i++], | ||
(err, result) => { | ||
if (err || result !== undefined || i >= array.length) { | ||
return callback(err, result); | ||
} | ||
if (loop === false) while (next()); | ||
loop = true; | ||
}, | ||
i | ||
); | ||
if (!loop) loop = false; | ||
@@ -23,0 +27,0 @@ return loop; |
@@ -14,8 +14,8 @@ /* | ||
let part = parts[parts.length - 1]; | ||
path = path.substr(0, path.length - part.length - 1); | ||
path = path.substring(0, path.length - part.length - 1); | ||
for (let i = parts.length - 2; i > 2; i -= 2) { | ||
paths.push(path); | ||
part = parts[i]; | ||
path = path.substr(0, path.length - part.length) || "/"; | ||
segments.push(part.substr(0, part.length - 1)); | ||
path = path.substring(0, path.length - part.length) || "/"; | ||
segments.push(part.slice(0, -1)); | ||
} | ||
@@ -36,4 +36,4 @@ part = parts[1]; | ||
if (p < 0) return null; | ||
const s = path.substr(p + 1); | ||
const s = path.slice(p + 1); | ||
return s; | ||
}; |
128
lib/index.js
@@ -15,2 +15,3 @@ /* | ||
/** @typedef {import("./Resolver").FileSystem} FileSystem */ | ||
/** @typedef {import("./Resolver").ResolveCallback} ResolveCallback */ | ||
/** @typedef {import("./Resolver").ResolveContext} ResolveContext */ | ||
@@ -20,2 +21,14 @@ /** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */ | ||
/** @typedef {import("./ResolverFactory").UserResolveOptions} ResolveOptions */ | ||
/** @typedef {{ | ||
* (context: object, path: string, request: string, resolveContext: ResolveContext, callback: ResolveCallback): void; | ||
* (context: object, path: string, request: string, callback: ResolveCallback): void; | ||
* (path: string, request: string, resolveContext: ResolveContext, callback: ResolveCallback): void; | ||
* (path: string, request: string, callback: ResolveCallback): void; | ||
* }} ResolveFunctionAsync | ||
*/ | ||
/** @typedef {{ | ||
* (context: object, path: string, request: string): string|false; | ||
* (path: string, request: string): string|false; | ||
* }} ResolveFunction | ||
*/ | ||
@@ -33,16 +46,34 @@ const nodeFileSystem = new CachedInputFileSystem(fs, 4000); | ||
}); | ||
function resolve(context, path, request, resolveContext, callback) { | ||
if (typeof context === "string") { | ||
callback = resolveContext; | ||
resolveContext = request; | ||
request = path; | ||
path = context; | ||
context = nodeContext; | ||
} | ||
if (typeof callback !== "function") { | ||
callback = resolveContext; | ||
} | ||
asyncResolver.resolve(context, path, request, resolveContext, callback); | ||
} | ||
/** | ||
* @type {ResolveFunctionAsync} | ||
*/ | ||
const resolve = | ||
/** | ||
* @param {object|string} context | ||
* @param {string} path | ||
* @param {string|ResolveContext|ResolveCallback} request | ||
* @param {ResolveContext|ResolveCallback=} resolveContext | ||
* @param {ResolveCallback=} callback | ||
*/ | ||
(context, path, request, resolveContext, callback) => { | ||
if (typeof context === "string") { | ||
callback = /** @type {ResolveCallback} */ (resolveContext); | ||
resolveContext = /** @type {ResolveContext} */ (request); | ||
request = path; | ||
path = context; | ||
context = nodeContext; | ||
} | ||
if (typeof callback !== "function") { | ||
callback = /** @type {ResolveCallback} */ (resolveContext); | ||
} | ||
asyncResolver.resolve( | ||
context, | ||
path, | ||
/** @type {string} */ (request), | ||
/** @type {ResolveContext} */ (resolveContext), | ||
/** @type {ResolveCallback} */ (callback) | ||
); | ||
}; | ||
const syncResolver = ResolverFactory.createResolver({ | ||
@@ -54,21 +85,47 @@ conditionNames: ["node"], | ||
}); | ||
function resolveSync(context, path, request) { | ||
if (typeof context === "string") { | ||
request = path; | ||
path = context; | ||
context = nodeContext; | ||
} | ||
return syncResolver.resolveSync(context, path, request); | ||
} | ||
/** | ||
* @type {ResolveFunction} | ||
*/ | ||
const resolveSync = | ||
/** | ||
* @param {object|string} context | ||
* @param {string} path | ||
* @param {string=} request | ||
*/ | ||
(context, path, request) => { | ||
if (typeof context === "string") { | ||
request = path; | ||
path = context; | ||
context = nodeContext; | ||
} | ||
return syncResolver.resolveSync( | ||
context, | ||
path, | ||
/** @type {string} */ (request) | ||
); | ||
}; | ||
/** @typedef {Omit<ResolveOptions, "fileSystem"> & Partial<Pick<ResolveOptions, "fileSystem">>} ResolveOptionsOptionalFS */ | ||
/** | ||
* @param {ResolveOptionsOptionalFS} options Resolver options | ||
* @returns {ResolveFunctionAsync} Resolver function | ||
*/ | ||
function create(options) { | ||
options = { | ||
const resolver = ResolverFactory.createResolver({ | ||
fileSystem: nodeFileSystem, | ||
...options | ||
}; | ||
const resolver = ResolverFactory.createResolver(options); | ||
}); | ||
/** | ||
* @param {object|string} context Custom context | ||
* @param {string} path Base path | ||
* @param {string|ResolveContext|ResolveCallback} request String to resolve | ||
* @param {ResolveContext|ResolveCallback=} resolveContext Resolve context | ||
* @param {ResolveCallback=} callback Result callback | ||
*/ | ||
return function (context, path, request, resolveContext, callback) { | ||
if (typeof context === "string") { | ||
callback = resolveContext; | ||
resolveContext = request; | ||
callback = /** @type {ResolveCallback} */ (resolveContext); | ||
resolveContext = /** @type {ResolveContext} */ (request); | ||
request = path; | ||
@@ -79,15 +136,24 @@ path = context; | ||
if (typeof callback !== "function") { | ||
callback = resolveContext; | ||
callback = /** @type {ResolveCallback} */ (resolveContext); | ||
} | ||
resolver.resolve(context, path, request, resolveContext, callback); | ||
resolver.resolve( | ||
context, | ||
path, | ||
/** @type {string} */ (request), | ||
/** @type {ResolveContext} */ (resolveContext), | ||
callback | ||
); | ||
}; | ||
} | ||
/** | ||
* @param {ResolveOptionsOptionalFS} options Resolver options | ||
* @returns {ResolveFunction} Resolver function | ||
*/ | ||
function createSync(options) { | ||
options = { | ||
const resolver = ResolverFactory.createResolver({ | ||
useSyncFileSystemCalls: true, | ||
fileSystem: nodeFileSystem, | ||
...options | ||
}; | ||
const resolver = ResolverFactory.createResolver(options); | ||
}); | ||
return function (context, path, request) { | ||
@@ -94,0 +160,0 @@ if (typeof context === "string") { |
@@ -20,2 +20,6 @@ /* | ||
/** @typedef {Error & {details?: string}} ErrorWithDetail */ | ||
/** @typedef {(err: ErrorWithDetail|null, res?: string|false, req?: ResolveRequest) => void} ResolveCallback */ | ||
/** | ||
@@ -126,3 +130,3 @@ * @typedef {Object} FileSystemStats | ||
function toCamelCase(str) { | ||
return str.replace(/-([a-z])/g, str => str.substr(1).toUpperCase()); | ||
return str.replace(/-([a-z])/g, str => str.slice(1).toUpperCase()); | ||
} | ||
@@ -183,3 +187,3 @@ | ||
return /** @type {ResolveStepHook} */ (this.ensureHook( | ||
name[6].toLowerCase() + name.substr(7) | ||
name[6].toLowerCase() + name.slice(7) | ||
).withOptions({ | ||
@@ -191,3 +195,3 @@ stage: -10 | ||
return /** @type {ResolveStepHook} */ (this.ensureHook( | ||
name[5].toLowerCase() + name.substr(6) | ||
name[5].toLowerCase() + name.slice(6) | ||
).withOptions({ | ||
@@ -218,3 +222,3 @@ stage: 10 | ||
return /** @type {ResolveStepHook} */ (this.getHook( | ||
name[6].toLowerCase() + name.substr(7) | ||
name[6].toLowerCase() + name.slice(7) | ||
).withOptions({ | ||
@@ -226,3 +230,3 @@ stage: -10 | ||
return /** @type {ResolveStepHook} */ (this.getHook( | ||
name[5].toLowerCase() + name.substr(6) | ||
name[5].toLowerCase() + name.slice(6) | ||
).withOptions({ | ||
@@ -271,3 +275,3 @@ stage: 10 | ||
* @param {ResolveContext} resolveContext resolve context | ||
* @param {function(Error | null, (string|false)=, ResolveRequest=): void} callback callback function | ||
* @param {ResolveCallback} callback callback function | ||
* @returns {void} | ||
@@ -322,3 +326,3 @@ */ | ||
/** | ||
* @type {Error & {details?: string}} | ||
* @type {ErrorWithDetail} | ||
*/ | ||
@@ -484,3 +488,3 @@ const error = new Error("Can't " + message); | ||
if (part.directory) { | ||
part.request = part.request.substr(0, part.request.length - 1); | ||
part.request = part.request.slice(0, -1); | ||
} | ||
@@ -487,0 +491,0 @@ } |
@@ -144,3 +144,3 @@ /* | ||
obj.onlyModule = true; | ||
obj.name = key.substr(0, key.length - 1); | ||
obj.name = key.slice(0, -1); | ||
} | ||
@@ -147,0 +147,0 @@ |
{ | ||
"name": "enhanced-resolve", | ||
"version": "5.13.0", | ||
"version": "5.14.0", | ||
"author": "Tobias Koppers @sokra", | ||
@@ -5,0 +5,0 @@ "description": "Offers a async require.resolve function. It's highly configurable.", |
128
types.d.ts
@@ -108,2 +108,3 @@ /* | ||
} | ||
type ErrorWithDetail = Error & { details?: string }; | ||
declare interface ExtensionAliasOption { | ||
@@ -265,2 +266,48 @@ alias: string | string[]; | ||
} | ||
declare interface ResolveFunction { | ||
(context: object, path: string, request: string): string | false; | ||
(path: string, request: string): string | false; | ||
} | ||
declare interface ResolveFunctionAsync { | ||
( | ||
context: object, | ||
path: string, | ||
request: string, | ||
resolveContext: ResolveContext, | ||
callback: ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
): void; | ||
( | ||
context: object, | ||
path: string, | ||
request: string, | ||
callback: ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
): void; | ||
( | ||
path: string, | ||
request: string, | ||
resolveContext: ResolveContext, | ||
callback: ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
): void; | ||
( | ||
path: string, | ||
request: string, | ||
callback: ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
): void; | ||
} | ||
declare interface ResolveOptions { | ||
@@ -299,2 +346,4 @@ alias: AliasOption[]; | ||
} | ||
type ResolveOptionsOptionalFS = Omit<UserResolveOptions, "fileSystem"> & | ||
Partial<Pick<UserResolveOptions, "fileSystem">>; | ||
type ResolveRequest = BaseResolveRequest & Partial<ParsedIdentifier>; | ||
@@ -350,5 +399,5 @@ declare abstract class Resolver { | ||
callback: ( | ||
arg0: null | Error, | ||
arg1?: string | false, | ||
arg2?: ResolveRequest | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
@@ -519,27 +568,48 @@ ): void; | ||
declare function exports( | ||
context?: any, | ||
path?: any, | ||
request?: any, | ||
resolveContext?: any, | ||
callback?: any | ||
context: object, | ||
path: string, | ||
request: string, | ||
resolveContext: ResolveContext, | ||
callback: ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
): void; | ||
declare function exports( | ||
context: object, | ||
path: string, | ||
request: string, | ||
callback: ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
): void; | ||
declare function exports( | ||
path: string, | ||
request: string, | ||
resolveContext: ResolveContext, | ||
callback: ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
): void; | ||
declare function exports( | ||
path: string, | ||
request: string, | ||
callback: ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void | ||
): void; | ||
declare namespace exports { | ||
export const sync: ( | ||
context?: any, | ||
path?: any, | ||
request?: any | ||
) => string | false; | ||
export const sync: ResolveFunction; | ||
export function create( | ||
options?: any | ||
): ( | ||
context?: any, | ||
path?: any, | ||
request?: any, | ||
resolveContext?: any, | ||
callback?: any | ||
) => void; | ||
options: ResolveOptionsOptionalFS | ||
): ResolveFunctionAsync; | ||
export namespace create { | ||
export const sync: ( | ||
options?: any | ||
) => (context?: any, path?: any, request?: any) => string | false; | ||
export const sync: (options: ResolveOptionsOptionalFS) => ResolveFunction; | ||
} | ||
@@ -554,2 +624,7 @@ export namespace ResolverFactory { | ||
) => any; | ||
export type ResolveCallback = ( | ||
err: null | ErrorWithDetail, | ||
res?: string | false, | ||
req?: ResolveRequest | ||
) => void; | ||
export { | ||
@@ -559,2 +634,3 @@ CachedInputFileSystem, | ||
LogInfoPlugin, | ||
ResolveOptionsOptionalFS, | ||
PnpApiImpl as PnpApi, | ||
@@ -566,3 +642,5 @@ Resolver, | ||
Plugin, | ||
UserResolveOptions as ResolveOptions | ||
UserResolveOptions as ResolveOptions, | ||
ResolveFunctionAsync, | ||
ResolveFunction | ||
}; | ||
@@ -569,0 +647,0 @@ } |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
168642
5349
0