| | |
| | | |
| | | /** @typedef {import("./ResolverFactory").ResolveOptions} ResolveOptions */ |
| | | |
| | | /** |
| | | * @typedef {object} KnownContext |
| | | * @property {string[]=} environments environments |
| | | */ |
| | | |
| | | // eslint-disable-next-line jsdoc/reject-any-type |
| | | /** @typedef {KnownContext & Record<any, any>} Context */ |
| | | |
| | | /** @typedef {import("./AliasUtils").AliasOption} AliasOption */ |
| | | /** @typedef {Error & { details?: string }} ErrorWithDetail */ |
| | | |
| | | /** @typedef {(err: ErrorWithDetail | null, res?: string | false, req?: ResolveRequest) => void} ResolveCallback */ |
| | |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathOrFileDescriptor, options: ({ encoding?: null | undefined, flag?: string | undefined } & import("events").Abortable) | undefined | null, callback: BufferCallback): void; |
| | | * (path: PathOrFileDescriptor, options: ({ encoding: BufferEncoding, flag?: string | undefined } & import("events").Abortable) | BufferEncoding, callback: StringCallback): void; |
| | | * (path: PathOrFileDescriptor, options: (ObjectEncodingOptions & { flag?: string | undefined } & import("events").Abortable) | BufferEncoding | undefined | null, callback: StringOrBufferCallback): void; |
| | | * (path: PathOrFileDescriptor, callback: BufferCallback): void; |
| | | * (path: PathOrFileDescriptor, options: ({ encoding?: null | undefined, flag?: string | undefined } & import("events").Abortable) | undefined | null, callback: BufferCallback): void, |
| | | * (path: PathOrFileDescriptor, options: ({ encoding: BufferEncoding, flag?: string | undefined } & import("events").Abortable) | BufferEncoding, callback: StringCallback): void, |
| | | * (path: PathOrFileDescriptor, options: (ObjectEncodingOptions & { flag?: string | undefined } & import("events").Abortable) | BufferEncoding | undefined | null, callback: StringOrBufferCallback): void, |
| | | * (path: PathOrFileDescriptor, callback: BufferCallback): void, |
| | | * }} ReadFile |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {'buffer'| { encoding: 'buffer' }} BufferEncodingOption |
| | | * @typedef {"buffer" | { encoding: "buffer" }} BufferEncodingOption |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathOrFileDescriptor, options?: { encoding?: null | undefined, flag?: string | undefined } | null): Buffer; |
| | | * (path: PathOrFileDescriptor, options: { encoding: BufferEncoding, flag?: string | undefined } | BufferEncoding): string; |
| | | * (path: PathOrFileDescriptor, options?: (ObjectEncodingOptions & { flag?: string | undefined }) | BufferEncoding | null): string | Buffer; |
| | | * (path: PathOrFileDescriptor, options?: { encoding?: null | undefined, flag?: string | undefined } | null): Buffer, |
| | | * (path: PathOrFileDescriptor, options: { encoding: BufferEncoding, flag?: string | undefined } | BufferEncoding): string, |
| | | * (path: PathOrFileDescriptor, options?: (ObjectEncodingOptions & { flag?: string | undefined }) | BufferEncoding | null): string | Buffer, |
| | | * }} ReadFileSync |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, options: { encoding: BufferEncoding | null, withFileTypes?: false | undefined, recursive?: boolean | undefined } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException | null, files?: string[]) => void): void; |
| | | * (path: PathLike, options: { encoding: 'buffer', withFileTypes?: false | undefined, recursive?: boolean | undefined } | 'buffer', callback: (err: NodeJS.ErrnoException | null, files?: Buffer[]) => void): void; |
| | | * (path: PathLike, options: (ObjectEncodingOptions & { withFileTypes?: false | undefined, recursive?: boolean | undefined }) | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException | null, files?: string[] | Buffer[]) => void): void; |
| | | * (path: PathLike, callback: (err: NodeJS.ErrnoException | null, files?: string[]) => void): void; |
| | | * (path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true, recursive?: boolean | undefined }, callback: (err: NodeJS.ErrnoException | null, files?: Dirent<string>[]) => void): void; |
| | | * (path: PathLike, options: { encoding: 'buffer', withFileTypes: true, recursive?: boolean | undefined }, callback: (err: NodeJS.ErrnoException | null, files: Dirent<Buffer>[]) => void): void; |
| | | * (path: PathLike, options: { encoding: BufferEncoding | null, withFileTypes?: false | undefined, recursive?: boolean | undefined } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException | null, files?: string[]) => void): void, |
| | | * (path: PathLike, options: { encoding: "buffer", withFileTypes?: false | undefined, recursive?: boolean | undefined } | "buffer", callback: (err: NodeJS.ErrnoException | null, files?: Buffer[]) => void): void, |
| | | * (path: PathLike, options: (ObjectEncodingOptions & { withFileTypes?: false | undefined, recursive?: boolean | undefined }) | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException | null, files?: string[] | Buffer[]) => void): void, |
| | | * (path: PathLike, callback: (err: NodeJS.ErrnoException | null, files?: string[]) => void): void, |
| | | * (path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true, recursive?: boolean | undefined }, callback: (err: NodeJS.ErrnoException | null, files?: Dirent<string>[]) => void): void, |
| | | * (path: PathLike, options: { encoding: "buffer", withFileTypes: true, recursive?: boolean | undefined }, callback: (err: NodeJS.ErrnoException | null, files: Dirent<Buffer>[]) => void): void, |
| | | * }} Readdir |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, options?: { encoding: BufferEncoding | null, withFileTypes?: false | undefined, recursive?: boolean | undefined; } | BufferEncoding | null): string[]; |
| | | * (path: PathLike, options: { encoding: 'buffer', withFileTypes?: false | undefined, recursive?: boolean | undefined } | 'buffer'): Buffer[]; |
| | | * (path: PathLike, options?: (ObjectEncodingOptions & { withFileTypes?: false | undefined, recursive?: boolean | undefined }) | BufferEncoding | null): string[] | Buffer[]; |
| | | * (path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true, recursive?: boolean | undefined }): Dirent[]; |
| | | * (path: PathLike, options: { encoding: "buffer", withFileTypes: true, recursive?: boolean | undefined }): Dirent<Buffer>[]; |
| | | * (path: PathLike, options?: { encoding: BufferEncoding | null, withFileTypes?: false | undefined, recursive?: boolean | undefined } | BufferEncoding | null): string[], |
| | | * (path: PathLike, options: { encoding: "buffer", withFileTypes?: false | undefined, recursive?: boolean | undefined } | "buffer"): Buffer[], |
| | | * (path: PathLike, options?: (ObjectEncodingOptions & { withFileTypes?: false | undefined, recursive?: boolean | undefined }) | BufferEncoding | null): string[] | Buffer[], |
| | | * (path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true, recursive?: boolean | undefined }): Dirent[], |
| | | * (path: PathLike, options: { encoding: "buffer", withFileTypes: true, recursive?: boolean | undefined }): Dirent<Buffer>[], |
| | | * }} ReaddirSync |
| | | */ |
| | | |
| | |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, options: EncodingOption, callback: StringCallback): void; |
| | | * (path: PathLike, options: BufferEncodingOption, callback: BufferCallback): void; |
| | | * (path: PathLike, options: EncodingOption, callback: StringOrBufferCallback): void; |
| | | * (path: PathLike, callback: StringCallback): void; |
| | | * (path: PathLike, options: EncodingOption, callback: StringCallback): void, |
| | | * (path: PathLike, options: BufferEncodingOption, callback: BufferCallback): void, |
| | | * (path: PathLike, options: EncodingOption, callback: StringOrBufferCallback): void, |
| | | * (path: PathLike, callback: StringCallback): void, |
| | | * }} Readlink |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, options?: EncodingOption): string; |
| | | * (path: PathLike, options: BufferEncodingOption): Buffer; |
| | | * (path: PathLike, options?: EncodingOption): string | Buffer; |
| | | * (path: PathLike, options?: EncodingOption): string, |
| | | * (path: PathLike, options: BufferEncodingOption): Buffer, |
| | | * (path: PathLike, options?: EncodingOption): string | Buffer, |
| | | * }} ReadlinkSync |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, callback: StatsCallback): void; |
| | | * (path: PathLike, options: (StatOptions & { bigint?: false | undefined }) | undefined, callback: StatsCallback): void; |
| | | * (path: PathLike, options: StatOptions & { bigint: true }, callback: BigIntStatsCallback): void; |
| | | * (path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback): void; |
| | | * (path: PathLike, callback: StatsCallback): void, |
| | | * (path: PathLike, options: (StatOptions & { bigint?: false | undefined }) | undefined, callback: StatsCallback): void, |
| | | * (path: PathLike, options: StatOptions & { bigint: true }, callback: BigIntStatsCallback): void, |
| | | * (path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback): void, |
| | | * }} LStat |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, options?: undefined): IStats; |
| | | * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined, throwIfNoEntry: false }): IStats | undefined; |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: true, throwIfNoEntry: false }): IBigIntStats | undefined; |
| | | * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined }): IStats; |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: true }): IBigIntStats; |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: boolean, throwIfNoEntry?: false | undefined }): IStats | IBigIntStats; |
| | | * (path: PathLike, options?: StatSyncOptions): IStats | IBigIntStats | undefined; |
| | | * (path: PathLike, options?: undefined): IStats, |
| | | * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined, throwIfNoEntry: false }): IStats | undefined, |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: true, throwIfNoEntry: false }): IBigIntStats | undefined, |
| | | * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined }): IStats, |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: true }): IBigIntStats, |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: boolean, throwIfNoEntry?: false | undefined }): IStats | IBigIntStats, |
| | | * (path: PathLike, options?: StatSyncOptions): IStats | IBigIntStats | undefined, |
| | | * }} LStatSync |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, callback: StatsCallback): void; |
| | | * (path: PathLike, options: (StatOptions & { bigint?: false | undefined }) | undefined, callback: StatsCallback): void; |
| | | * (path: PathLike, options: StatOptions & { bigint: true }, callback: BigIntStatsCallback): void; |
| | | * (path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback): void; |
| | | * (path: PathLike, callback: StatsCallback): void, |
| | | * (path: PathLike, options: (StatOptions & { bigint?: false | undefined }) | undefined, callback: StatsCallback): void, |
| | | * (path: PathLike, options: StatOptions & { bigint: true }, callback: BigIntStatsCallback): void, |
| | | * (path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback): void, |
| | | * }} Stat |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, options?: undefined): IStats; |
| | | * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined, throwIfNoEntry: false }): IStats | undefined; |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: true, throwIfNoEntry: false }): IBigIntStats | undefined; |
| | | * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined }): IStats; |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: true }): IBigIntStats; |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: boolean, throwIfNoEntry?: false | undefined }): IStats | IBigIntStats; |
| | | * (path: PathLike, options?: StatSyncOptions): IStats | IBigIntStats | undefined; |
| | | * (path: PathLike, options?: undefined): IStats, |
| | | * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined, throwIfNoEntry: false }): IStats | undefined, |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: true, throwIfNoEntry: false }): IBigIntStats | undefined, |
| | | * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined }): IStats, |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: true }): IBigIntStats, |
| | | * (path: PathLike, options: StatSyncOptions & { bigint: boolean, throwIfNoEntry?: false | undefined }): IStats | IBigIntStats, |
| | | * (path: PathLike, options?: StatSyncOptions): IStats | IBigIntStats | undefined, |
| | | * }} StatSync |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, options: EncodingOption, callback: StringCallback): void; |
| | | * (path: PathLike, options: BufferEncodingOption, callback: BufferCallback): void; |
| | | * (path: PathLike, options: EncodingOption, callback: StringOrBufferCallback): void; |
| | | * (path: PathLike, callback: StringCallback): void; |
| | | * (path: PathLike, options: EncodingOption, callback: StringCallback): void, |
| | | * (path: PathLike, options: BufferEncodingOption, callback: BufferCallback): void, |
| | | * (path: PathLike, options: EncodingOption, callback: StringOrBufferCallback): void, |
| | | * (path: PathLike, callback: StringCallback): void, |
| | | * }} RealPath |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{ |
| | | * (path: PathLike, options?: EncodingOption): string; |
| | | * (path: PathLike, options: BufferEncodingOption): Buffer; |
| | | * (path: PathLike, options?: EncodingOption): string | Buffer; |
| | | * (path: PathLike, options?: EncodingOption): string, |
| | | * (path: PathLike, options: BufferEncodingOption): Buffer, |
| | | * (path: PathLike, options?: EncodingOption): string | Buffer, |
| | | * }} RealPathSync |
| | | */ |
| | | |
| | |
| | | /** @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue */ |
| | | /** @typedef {{ [Key in string]?: JsonValue | undefined }} JsonObject */ |
| | | |
| | | // eslint-disable-next-line jsdoc/require-property |
| | | /** @typedef {object} Context */ |
| | | /** |
| | | * @typedef {object} TsconfigPathsMap |
| | | * @property {TsconfigPathsData} main main tsconfig paths data |
| | | * @property {string} mainContext main tsconfig base URL (absolute path) |
| | | * @property {{ [baseUrl: string]: TsconfigPathsData }} refs referenced tsconfig paths data mapped by baseUrl |
| | | * @property {{ [context: string]: TsconfigPathsData }} allContexts all contexts (main + refs) for quick lookup |
| | | * @property {Set<string>} fileDependencies file dependencies |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {object} TsconfigPathsData |
| | | * @property {AliasOption[]} alias tsconfig file data |
| | | * @property {string[]} modules tsconfig file data |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {object} BaseResolveRequest |
| | |
| | | * @property {string=} descriptionFilePath description file path |
| | | * @property {string=} descriptionFileRoot description file root |
| | | * @property {JsonObject=} descriptionFileData description file data |
| | | * @property {TsconfigPathsMap | null | undefined=} tsconfigPathsMap tsconfig paths map |
| | | * @property {string=} relativePath relative path |
| | | * @property {boolean=} ignoreSymlinks true when need to ignore symlinks, otherwise false |
| | | * @property {boolean=} fullySpecified true when full specified, otherwise false |
| | |
| | | */ |
| | | |
| | | /** |
| | | * @typedef {{[key: string]: ResolveStepHook}} EnsuredHooks |
| | | * @typedef {{ [key: string]: ResolveStepHook }} EnsuredHooks |
| | | */ |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * @param {object} context context information object |
| | | * @param {Context} context context information object |
| | | * @param {string} path context path |
| | | * @param {string} request request string |
| | | * @returns {string | false} result |
| | |
| | | } |
| | | |
| | | /** |
| | | * @param {object} context context information object |
| | | * @param {Context} context context information object |
| | | * @param {string} path context path |
| | | * @param {string} request request string |
| | | * @param {ResolveContext} resolveContext resolve context |
| | |
| | | /** |
| | | * @param {ResolveStepHook} hook hook |
| | | * @param {ResolveRequest} request request |
| | | * @param {null|string} message string |
| | | * @param {null | string} message string |
| | | * @param {ResolveContext} resolveContext resolver context |
| | | * @param {(err?: null|Error, result?: ResolveRequest) => void} callback callback |
| | | * @param {(err?: null | Error, result?: ResolveRequest) => void} callback callback |
| | | * @returns {void} |
| | | */ |
| | | doResolve(hook, request, message, resolveContext, callback) { |
| | |
| | | if (resolveContext.stack.has(stackEntry)) { |
| | | /** |
| | | * Prevent recursion |
| | | * @type {Error & {recursion?: boolean}} |
| | | * @type {Error & { recursion?: boolean }} |
| | | */ |
| | | const recursionError = new Error( |
| | | `Recursion in resolving\nStack:\n ${[...newStack].join("\n ")}`, |