mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-09-22 05:40:48 +02:00
Stop using module.createRequire (problematic under webpack), incorporate and export resolveModule helper from markdownlint-cli2.
This commit is contained in:
parent
a1da464618
commit
53ff5c43f1
16 changed files with 327 additions and 25 deletions
16
lib/defer-require.cjs
Normal file
16
lib/defer-require.cjs
Normal file
|
@ -0,0 +1,16 @@
|
|||
// @ts-check
|
||||
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Calls require for markdownit.cjs. Used to synchronously defer loading because module.createRequire is buggy under webpack (https://github.com/webpack/webpack/issues/16724).
|
||||
*
|
||||
* @returns {any} Exported module content.
|
||||
*/
|
||||
function requireMarkdownItCjs() {
|
||||
return require("./markdownit.cjs");
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
requireMarkdownItCjs
|
||||
};
|
|
@ -1,3 +1,4 @@
|
|||
export { resolveModule } from "./resolve-module.cjs";
|
||||
export type Configuration = import("./markdownlint.mjs").Configuration;
|
||||
export type ConfigurationParser = import("./markdownlint.mjs").ConfigurationParser;
|
||||
export type ConfigurationStrict = import("./markdownlint.mjs").ConfigurationStrict;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// @ts-check
|
||||
|
||||
export { applyFix, applyFixes, getVersion } from "./markdownlint.mjs";
|
||||
export { resolveModule } from "./resolve-module.cjs";
|
||||
|
||||
/** @typedef {import("./markdownlint.mjs").Configuration} Configuration */
|
||||
/** @typedef {import("./markdownlint.mjs").ConfigurationParser} ConfigurationParser */
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// @ts-check
|
||||
|
||||
// @ts-ignore
|
||||
import { fs as nodeFs, module, os, path } from "#node-imports";
|
||||
const dynamicRequire = module.createRequire(import.meta.url);
|
||||
import { fs as nodeFs, os, path } from "#node-imports";
|
||||
import { initialize as cacheInitialize } from "./cache.mjs";
|
||||
import { version } from "./constants.mjs";
|
||||
import { requireMarkdownItCjs } from "./defer-require.cjs";
|
||||
import { resolveModule } from "./resolve-module.cjs";
|
||||
import rules from "./rules.mjs";
|
||||
import { parse as micromarkParse } from "./micromark-parse.mjs";
|
||||
import * as helpers from "../helpers/helpers.cjs";
|
||||
|
@ -501,7 +502,7 @@ function lintContent(
|
|||
// Parse content into lines and get markdown-it tokens
|
||||
const lines = content.split(helpers.newLineRe);
|
||||
const markdownitTokens = needMarkdownItTokens ?
|
||||
dynamicRequire("./markdownit.cjs").getMarkdownItTokens(markdownItPlugins, preClearedContent, lines) :
|
||||
requireMarkdownItCjs().getMarkdownItTokens(markdownItPlugins, preClearedContent, lines) :
|
||||
[];
|
||||
// Create (frozen) parameters for rules
|
||||
/** @type {MarkdownParsers} */
|
||||
|
@ -1010,10 +1011,10 @@ function resolveConfigExtends(configFile, referenceId, fs, callback) {
|
|||
if (err) {
|
||||
// Not a file, try require.resolve
|
||||
try {
|
||||
return callback(null, dynamicRequire.resolve(
|
||||
referenceId,
|
||||
{ "paths": [ configFileDirname ] }
|
||||
));
|
||||
return callback(
|
||||
null,
|
||||
resolveModule(referenceId, [ configFileDirname ])
|
||||
);
|
||||
} catch {
|
||||
// Unable to resolve, use resolvedExtendsFile
|
||||
}
|
||||
|
@ -1041,10 +1042,7 @@ function resolveConfigExtendsSync(configFile, referenceId, fs) {
|
|||
// Not a file, try require.resolve
|
||||
}
|
||||
try {
|
||||
return dynamicRequire.resolve(
|
||||
referenceId,
|
||||
{ "paths": [ configFileDirname ] }
|
||||
);
|
||||
return resolveModule(referenceId, [ configFileDirname ]);
|
||||
} catch {
|
||||
// Unable to resolve, return resolvedExtendsFile
|
||||
}
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
// @ts-check
|
||||
|
||||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
"createRequire": () => require
|
||||
};
|
|
@ -12,8 +12,6 @@ export const fs = {
|
|||
"readFileSync": throwForSync
|
||||
};
|
||||
|
||||
export { default as module } from "./node-imports-browser-module.cjs";
|
||||
|
||||
export const os = {};
|
||||
|
||||
export const path = {
|
||||
|
|
|
@ -3,9 +3,6 @@
|
|||
import { access, accessSync, readFile, readFileSync } from "node:fs";
|
||||
export const fs = { access, accessSync, readFile, readFileSync };
|
||||
|
||||
import { createRequire } from "node:module";
|
||||
export const module = { createRequire };
|
||||
|
||||
import { EOL, homedir } from "node:os";
|
||||
export const os = { EOL, homedir };
|
||||
|
||||
|
|
52
lib/resolve-module.cjs
Normal file
52
lib/resolve-module.cjs
Normal file
|
@ -0,0 +1,52 @@
|
|||
// @ts-check
|
||||
|
||||
"use strict";
|
||||
|
||||
// @ts-ignore
|
||||
// eslint-disable-next-line camelcase, no-inline-comments, no-undef
|
||||
const nativeRequire = (typeof __non_webpack_require__ === "undefined") ? require : /* c8 ignore next */ __non_webpack_require__;
|
||||
// Captures the native require implementation (even under webpack).
|
||||
|
||||
/**
|
||||
* @typedef RequireResolveOptions
|
||||
* @property {string[]} [paths] Additional paths to resolve from.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @callback RequireResolve
|
||||
* @param {string} id Module name or path.
|
||||
* @param {RequireResolveOptions} options Options to apply.
|
||||
* @returns {string} Resolved module path.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Resolves modules according to Node's resolution rules.
|
||||
*
|
||||
* @param {RequireResolve} resolve Node-like require.resolve implementation.
|
||||
* @param {string} id Module name or path.
|
||||
* @param {string[]} [paths] Additional paths to resolve from.
|
||||
* @returns {string} Resolved module path.
|
||||
*/
|
||||
const resolveModuleCustomResolve = (resolve, id, paths = []) => {
|
||||
// resolve.paths is sometimes not present under webpack or VS Code
|
||||
// @ts-ignore
|
||||
const resolvePaths = resolve.paths?.("") || [];
|
||||
const allPaths = [ ...paths, ...resolvePaths ];
|
||||
return resolve(id, { "paths": allPaths });
|
||||
};
|
||||
|
||||
/**
|
||||
* Resolves modules according to Node's resolution rules.
|
||||
*
|
||||
* @param {string} id Module name or path.
|
||||
* @param {string[]} [paths] Additional paths to resolve from.
|
||||
* @returns {string} Resolved module path.
|
||||
*/
|
||||
const resolveModule = (id, paths) => (
|
||||
resolveModuleCustomResolve(nativeRequire.resolve, id, paths)
|
||||
);
|
||||
|
||||
module.exports = {
|
||||
resolveModule,
|
||||
resolveModuleCustomResolve
|
||||
};
|
34
lib/resolve-module.d.cts
Normal file
34
lib/resolve-module.d.cts
Normal file
|
@ -0,0 +1,34 @@
|
|||
export type RequireResolveOptions = {
|
||||
/**
|
||||
* Additional paths to resolve from.
|
||||
*/
|
||||
paths?: string[];
|
||||
};
|
||||
export type RequireResolve = (id: string, options: RequireResolveOptions) => string;
|
||||
/**
|
||||
* Resolves modules according to Node's resolution rules.
|
||||
*
|
||||
* @param {string} id Module name or path.
|
||||
* @param {string[]} [paths] Additional paths to resolve from.
|
||||
* @returns {string} Resolved module path.
|
||||
*/
|
||||
export function resolveModule(id: string, paths?: string[]): string;
|
||||
/**
|
||||
* @typedef RequireResolveOptions
|
||||
* @property {string[]} [paths] Additional paths to resolve from.
|
||||
*/
|
||||
/**
|
||||
* @callback RequireResolve
|
||||
* @param {string} id Module name or path.
|
||||
* @param {RequireResolveOptions} options Options to apply.
|
||||
* @returns {string} Resolved module path.
|
||||
*/
|
||||
/**
|
||||
* Resolves modules according to Node's resolution rules.
|
||||
*
|
||||
* @param {RequireResolve} resolve Node-like require.resolve implementation.
|
||||
* @param {string} id Module name or path.
|
||||
* @param {string[]} [paths] Additional paths to resolve from.
|
||||
* @returns {string} Resolved module path.
|
||||
*/
|
||||
export function resolveModuleCustomResolve(resolve: RequireResolve, id: string, paths?: string[]): string;
|
Loading…
Add table
Add a link
Reference in a new issue