mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-12-16 14:00:13 +01: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
147
test/resolve-module-test.mjs
Normal file
147
test/resolve-module-test.mjs
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
// @ts-check
|
||||
|
||||
import test from "ava";
|
||||
import path from "node:path";
|
||||
import { __dirname as getDirname } from "./esm-helpers.mjs";
|
||||
import { resolveModule, resolveModuleCustomResolve } from "../lib/resolve-module.cjs";
|
||||
|
||||
import { createRequire } from "node:module";
|
||||
const require = createRequire(import.meta.url);
|
||||
// eslint-disable-next-line no-underscore-dangle
|
||||
const __dirname = getDirname(import.meta);
|
||||
|
||||
test("built-in module", (t) => {
|
||||
t.plan(1);
|
||||
t.deepEqual(
|
||||
resolveModule("node:fs"),
|
||||
require.resolve("node:fs")
|
||||
);
|
||||
});
|
||||
|
||||
test("locally-installed module", (t) => {
|
||||
t.plan(1);
|
||||
t.deepEqual(
|
||||
resolveModule("micromark"),
|
||||
require.resolve("micromark")
|
||||
);
|
||||
});
|
||||
|
||||
test("absolute path to module", (t) => {
|
||||
t.plan(1);
|
||||
const absolute =
|
||||
path.resolve(
|
||||
__dirname,
|
||||
"./rules/node_modules/markdownlint-rule-sample-commonjs"
|
||||
);
|
||||
t.deepEqual(
|
||||
resolveModule(absolute),
|
||||
require.resolve(absolute)
|
||||
);
|
||||
});
|
||||
|
||||
test("relative (to __dirname) path to module", (t) => {
|
||||
t.plan(1);
|
||||
t.deepEqual(
|
||||
resolveModule(
|
||||
"./rules/node_modules/markdownlint-rule-sample-module",
|
||||
// __dirname is needed because require.resolve is relative to this
|
||||
// file while resolveModule is relative to resolve-module.cjs
|
||||
[ __dirname ]
|
||||
),
|
||||
require.resolve(
|
||||
"./rules/node_modules/markdownlint-rule-sample-module"
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
test("module in alternate node_modules", (t) => {
|
||||
t.plan(3);
|
||||
t.throws(
|
||||
() => require.resolve("markdownlint-rule-sample-commonjs"),
|
||||
{ "code": "MODULE_NOT_FOUND" }
|
||||
);
|
||||
t.throws(
|
||||
() => resolveModule("markdownlint-rule-sample-commonjs"),
|
||||
{ "code": "MODULE_NOT_FOUND" }
|
||||
);
|
||||
t.deepEqual(
|
||||
resolveModule(
|
||||
"markdownlint-rule-sample-commonjs",
|
||||
[ path.join(__dirname, "rules") ]
|
||||
),
|
||||
require.resolve(
|
||||
"markdownlint-rule-sample-commonjs",
|
||||
{ "paths": [ path.join(__dirname, "rules") ] }
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
test("module local, relative, and in alternate node_modules (same paths)", (t) => {
|
||||
t.plan(3);
|
||||
const paths = [
|
||||
__dirname,
|
||||
path.join(__dirname, "rules")
|
||||
];
|
||||
t.deepEqual(
|
||||
resolveModule(
|
||||
"micromark",
|
||||
paths
|
||||
),
|
||||
require.resolve(
|
||||
"micromark",
|
||||
{ paths }
|
||||
)
|
||||
);
|
||||
t.deepEqual(
|
||||
resolveModule(
|
||||
"./rules/node_modules/markdownlint-rule-sample-commonjs",
|
||||
paths
|
||||
),
|
||||
require.resolve(
|
||||
"./rules/node_modules/markdownlint-rule-sample-commonjs",
|
||||
{ paths }
|
||||
)
|
||||
);
|
||||
t.deepEqual(
|
||||
resolveModule(
|
||||
"markdownlint-rule-sample-commonjs",
|
||||
paths
|
||||
),
|
||||
require.resolve(
|
||||
"markdownlint-rule-sample-commonjs",
|
||||
{ paths }
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
test("custom resolve implementation", (t) => {
|
||||
t.plan(1);
|
||||
const expected =
|
||||
require.resolve("./rules/node_modules/markdownlint-rule-sample-module");
|
||||
const customResolve = (id, options) => require.resolve(id, options);
|
||||
customResolve.paths = (request) => require.resolve.paths(request);
|
||||
t.deepEqual(
|
||||
resolveModuleCustomResolve(
|
||||
customResolve,
|
||||
"./rules/node_modules/markdownlint-rule-sample-module",
|
||||
[ __dirname ]
|
||||
),
|
||||
expected
|
||||
);
|
||||
});
|
||||
|
||||
test("custom resolve implementation, missing paths", (t) => {
|
||||
t.plan(1);
|
||||
const expected =
|
||||
require.resolve("./rules/node_modules/markdownlint-rule-sample-commonjs");
|
||||
const customResolve = (id, options) => require.resolve(id, options);
|
||||
t.deepEqual(
|
||||
resolveModuleCustomResolve(
|
||||
// @ts-ignore
|
||||
customResolve,
|
||||
"./rules/node_modules/markdownlint-rule-sample-commonjs",
|
||||
[ __dirname ]
|
||||
),
|
||||
expected
|
||||
);
|
||||
});
|
||||
14
test/rules/node_modules/markdownlint-rule-sample-commonjs/package.json
generated
vendored
Normal file
14
test/rules/node_modules/markdownlint-rule-sample-commonjs/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"name": "markdownlint-rule-sample-commonjs",
|
||||
"version": "0.0.1",
|
||||
"description": "Package for markdownlint custom rule sample (commonjs)",
|
||||
"main": "sample-rule.cjs",
|
||||
"type": "commonjs",
|
||||
"author": "David Anson (https://dlaa.me/)",
|
||||
"homepage": "https://github.com/DavidAnson/markdownlint",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"markdownlint-rule"
|
||||
],
|
||||
"private": true
|
||||
}
|
||||
18
test/rules/node_modules/markdownlint-rule-sample-commonjs/sample-rule.cjs
generated
vendored
Normal file
18
test/rules/node_modules/markdownlint-rule-sample-commonjs/sample-rule.cjs
generated
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
// @ts-check
|
||||
|
||||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
"names": [ "sample-rule-commonjs" ],
|
||||
"description": "Sample rule (commonjs)",
|
||||
"tags": [ "sample" ],
|
||||
"function": (params, onError) => {
|
||||
const hrTokens = params.tokens.filter((token) => token.type === "hr");
|
||||
for (const token of hrTokens) {
|
||||
onError({
|
||||
"lineNumber": token.lineNumber,
|
||||
"detail": "Sample error for hr"
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
14
test/rules/node_modules/markdownlint-rule-sample-module/package.json
generated
vendored
Normal file
14
test/rules/node_modules/markdownlint-rule-sample-module/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"name": "markdownlint-rule-sample-module",
|
||||
"version": "0.0.1",
|
||||
"description": "Package for markdownlint custom rule sample (module)",
|
||||
"main": "sample-rule.mjs",
|
||||
"type": "module",
|
||||
"author": "David Anson (https://dlaa.me/)",
|
||||
"homepage": "https://github.com/DavidAnson/markdownlint",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"markdownlint-rule"
|
||||
],
|
||||
"private": true
|
||||
}
|
||||
18
test/rules/node_modules/markdownlint-rule-sample-module/sample-rule.mjs
generated
vendored
Normal file
18
test/rules/node_modules/markdownlint-rule-sample-module/sample-rule.mjs
generated
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
// @ts-check
|
||||
|
||||
const rule = {
|
||||
"names": [ "sample-rule-module" ],
|
||||
"description": "Sample rule (module)",
|
||||
"tags": [ "sample" ],
|
||||
"function": (params, onError) => {
|
||||
const hrTokens = params.tokens.filter((token) => token.type === "hr");
|
||||
for (const token of hrTokens) {
|
||||
onError({
|
||||
"lineNumber": token.lineNumber,
|
||||
"detail": "Sample error for hr"
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default rule;
|
||||
Loading…
Add table
Add a link
Reference in a new issue