pr-checkmate 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,37 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
@@ -69,7 +36,7 @@ const GO_GLOBS = ['*.go'];
69
36
  async function loadBundledGofmt() {
70
37
  try {
71
38
  const entry = (0, index_js_1.resolvePackageBin)('@wasm-fmt/gofmt', 'gofmt_node.js');
72
- const mod = (await Promise.resolve(`${(0, node_url_1.pathToFileURL)(entry).href}`).then(s => __importStar(require(s))));
39
+ const mod = (await import((0, node_url_1.pathToFileURL)(entry).href));
73
40
  return mod.format;
74
41
  }
75
42
  catch (err) {
@@ -5,10 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.markdownLintCheck = void 0;
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
- const node_os_1 = __importDefault(require("node:os"));
9
8
  const node_path_1 = __importDefault(require("node:path"));
9
+ const node_url_1 = require("node:url");
10
10
  const index_js_1 = require("../../../config/index.js");
11
- const execa_js_1 = require("../../../utils/execa.js");
12
11
  const index_js_2 = require("../../../utils/index.js");
13
12
  const targets_js_1 = require("../../targets.js");
14
13
  const types_js_1 = require("../../types.js");
@@ -24,12 +23,66 @@ function loadUserMarkdownConfig(cwd) {
24
23
  return {};
25
24
  }
26
25
  }
27
- function buildMergedConfig(bundledConfigPath, userRules) {
28
- const bundled = JSON.parse(node_fs_1.default.readFileSync(bundledConfigPath, 'utf-8'));
29
- const merged = { ...bundled, ...userRules };
30
- const tmpFile = node_path_1.default.join(node_os_1.default.tmpdir(), `.markdownlint-merged-${process.pid}.json`);
31
- node_fs_1.default.writeFileSync(tmpFile, JSON.stringify(merged, null, 2));
32
- return tmpFile;
26
+ /**
27
+ * Load the markdownlint library, or `null` when it cannot be found.
28
+ *
29
+ * The library rather than `markdownlint-cli2`: the CLI drags in globby →
30
+ * micromatch → braces, which carries an unpatched advisory every client's
31
+ * `npm audit` then reports against pr-checkmate. We already have the file list
32
+ * from git, so the CLI's globbing bought nothing.
33
+ *
34
+ * Resolved through `resolvePackageBin` and loaded by a dynamic `import()` for the
35
+ * same two reasons as the bundled gofmt: the package may live in a fetched
36
+ * profile directory, and it is ESM while we emit CommonJS.
37
+ */
38
+ async function loadMarkdownlint() {
39
+ try {
40
+ const promiseEntry = (0, index_js_2.resolvePackageBin)('markdownlint', 'lib/exports-promise.mjs');
41
+ const mainEntry = node_path_1.default.join(node_path_1.default.dirname(promiseEntry), 'exports.mjs');
42
+ const promise = (await import((0, node_url_1.pathToFileURL)(promiseEntry).href));
43
+ const main = (await import((0, node_url_1.pathToFileURL)(mainEntry).href));
44
+ return { lint: promise.lint, readConfig: promise.readConfig, applyFixes: main.applyFixes };
45
+ }
46
+ catch (err) {
47
+ index_js_2.logger.warn(`[Markdown]: ⚠️ markdownlint could not be loaded\n${err}`);
48
+ return null;
49
+ }
50
+ }
51
+ /**
52
+ * The rules to lint with: the repository's own config when it has one, ours
53
+ * (plus the client's `markdownlint.rules`) when it does not. Someone with a
54
+ * `.markdownlint.json` has an opinion; merging ours into it would silently
55
+ * override the rules they wrote.
56
+ */
57
+ async function readLintConfig(lib, cwd, userRules) {
58
+ const local = ['.markdownlint.json', '.markdownlint.jsonc'].find(name => (0, index_js_1.hasLocalConfig)([name], cwd));
59
+ if (local)
60
+ return lib.readConfig(node_path_1.default.join(cwd, local));
61
+ if ((0, index_js_1.hasLocalConfig)(['.markdownlint.yaml', '.markdownlint.yml'], cwd)) {
62
+ index_js_2.logger.warn('[Markdown]: ⚠️ YAML markdownlint configs are not supported, using bundled rules');
63
+ }
64
+ const bundled = await lib.readConfig((0, index_js_1.getPackageConfigPath)('.markdownlint.json'));
65
+ return { ...bundled, ...userRules };
66
+ }
67
+ /**
68
+ * An ignore pattern as a regular expression over a repo-relative path.
69
+ *
70
+ * A bare directory name excludes its contents; a file name matches exactly; `*`
71
+ * stays within a segment and `**` crosses them. `path.extname` is what tells a
72
+ * directory from a file, and it reads a leading dot as part of the name, so
73
+ * `.claude` is still the directory it is.
74
+ */
75
+ function toIgnoreRegExp(pattern) {
76
+ const clean = pattern.replace(/\/+$/, '');
77
+ const escaped = clean
78
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
79
+ .replace(/\*\*\//g, '\u0001')
80
+ .replace(/\*\*/g, '\u0000')
81
+ .replace(/\*/g, '[^/]*')
82
+ .replace(/\u0001/g, '(?:.*/)?')
83
+ .replace(/\u0000/g, '.*');
84
+ const isDir = !clean.includes('*') && !node_path_1.default.extname(clean);
85
+ return new RegExp(`^${escaped}${isDir ? '(/.*)?' : ''}$`);
33
86
  }
34
87
  exports.markdownLintCheck = {
35
88
  name: 'Markdown',
@@ -45,23 +98,10 @@ exports.markdownLintCheck = {
45
98
  return (0, types_js_1.skip)('no markdown files');
46
99
  const userConfig = loadUserMarkdownConfig(ctx.cwd);
47
100
  const userRules = userConfig.rules ?? {};
48
- let tempConfigFile = null;
49
- let configArg;
50
- if ((0, index_js_1.hasLocalConfig)(['.markdownlint.json', '.markdownlint.jsonc', '.markdownlint.yaml', '.markdownlint.yml'], ctx.cwd)) {
51
- configArg = [];
52
- }
53
- else {
54
- const bundledConfig = (0, index_js_1.getPackageConfigPath)('.markdownlint.json');
55
- if (Object.keys(userRules).length > 0) {
56
- tempConfigFile = buildMergedConfig(bundledConfig, userRules);
57
- configArg = ['--config', tempConfigFile];
58
- }
59
- else {
60
- configArg = ['--config', bundledConfig];
61
- }
62
- }
63
- const markdownlintBin = (0, index_js_2.resolvePackageBin)('markdownlint-cli2', 'markdownlint-cli2-bin.mjs');
64
- const defaultIgnorePatterns = [
101
+ const lib = await loadMarkdownlint();
102
+ if (!lib)
103
+ return (0, types_js_1.warn)('markdownlint failed to run (exit 2) — check the markdownlint config');
104
+ const ignores = [
65
105
  'node_modules/**',
66
106
  'dist/**',
67
107
  'coverage/**',
@@ -70,41 +110,38 @@ exports.markdownLintCheck = {
70
110
  // Release-tool output, not prose anyone edits — see GENERATED_DOC_FILES.
71
111
  ...index_js_1.GENERATED_DOC_FILES,
72
112
  ...(userConfig.ignores ?? []),
73
- ];
74
- // markdownlint-cli2 has no --ignore-path flag; exclusions are expressed as
75
- // negated globs (`#pattern`). A bare directory name also needs `#name/**`
76
- // to exclude its contents — but a filename does not, and `#CHANGELOG.md/**`
77
- // is a glob that can never match. `path.extname` is what tells them apart,
78
- // and it reads a leading dot as part of the name, so `.claude` is still
79
- // treated as the directory it is.
80
- const ignoreGlobs = defaultIgnorePatterns.flatMap(pattern => {
81
- const clean = pattern.replace(/\/+$/, '');
82
- const globs = [`#${clean}`];
83
- if (!clean.includes('*') && !node_path_1.default.extname(clean))
84
- globs.push(`#${clean}/**`);
85
- return globs;
86
- });
87
- const args = [...(ctx.write ? ['--fix'] : []), ...targets, ...ignoreGlobs, ...configArg];
113
+ ].map(toIgnoreRegExp);
114
+ const files = targets.filter(file => !ignores.some(re => re.test(file)));
115
+ if (files.length === 0)
116
+ return (0, types_js_1.skip)('no markdown files');
88
117
  try {
89
- const result = await (0, execa_js_1.execa)(process.execPath, [markdownlintBin, ...args], {
90
- cwd: ctx.cwd,
91
- reject: false,
92
- stdio: 'inherit',
93
- });
94
- if (result.exitCode === 0)
95
- return (0, types_js_1.pass)();
96
- // markdownlint-cli2 exits 1 for lint findings and 2 when it could not run
97
- // (an unreadable config, a bad glob). Reporting the latter as "markdown lint
98
- // issues found" names the wrong cause — and under `severity: error` it
99
- // becomes a gate on a tooling problem.
100
- if (result.exitCode === 2) {
101
- return (0, types_js_1.warn)('markdownlint failed to run (exit 2) — check the markdownlint config');
118
+ const config = await readLintConfig(lib, ctx.cwd, userRules);
119
+ const results = await lib.lint({ files: files.map(f => node_path_1.default.resolve(ctx.cwd, f)), config });
120
+ let findings = 0;
121
+ for (const [file, errors] of Object.entries(results)) {
122
+ if (errors.length === 0)
123
+ continue;
124
+ const rel = node_path_1.default.relative(ctx.cwd, file);
125
+ let remaining = errors;
126
+ if (ctx.write && errors.some(e => e.fixInfo)) {
127
+ const fixed = lib.applyFixes(node_fs_1.default.readFileSync(file, 'utf-8'), errors);
128
+ node_fs_1.default.writeFileSync(file, fixed);
129
+ remaining = errors.filter(e => !e.fixInfo);
130
+ }
131
+ for (const e of remaining) {
132
+ findings++;
133
+ const col = e.errorRange?.[0] ? `:${e.errorRange[0]}` : '';
134
+ index_js_2.logger.warn(`${rel}:${e.lineNumber}${col} ${e.ruleNames.join('/')} ${e.ruleDescription}` +
135
+ (e.errorDetail ? ` [${e.errorDetail}]` : ''));
136
+ }
102
137
  }
103
- return (0, types_js_1.warn)('markdown lint issues found');
138
+ return findings === 0 ? (0, types_js_1.pass)() : (0, types_js_1.warn)('markdown lint issues found');
104
139
  }
105
- finally {
106
- if (tempConfigFile && node_fs_1.default.existsSync(tempConfigFile))
107
- node_fs_1.default.unlinkSync(tempConfigFile);
140
+ catch (err) {
141
+ // An unreadable config or a file that vanished: the tool could not run,
142
+ // which is not the same claim as "the prose has problems".
143
+ index_js_2.logger.warn(`[Markdown]: ⚠️ ${err}`);
144
+ return (0, types_js_1.warn)('markdownlint failed to run (exit 2) — check the markdownlint config');
108
145
  }
109
146
  },
110
147
  };
@@ -91,7 +91,7 @@ exports.PROFILES = [
91
91
  },
92
92
  {
93
93
  name: 'markdown',
94
- packages: ['markdownlint-cli2'],
94
+ packages: ['markdownlint'],
95
95
  checks: ['Markdown'],
96
96
  },
97
97
  {
@@ -1,37 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.execa = execa;
37
4
  /**
@@ -41,6 +8,6 @@ exports.execa = execa;
41
8
  * this package — all of which await the result and read it synchronously.
42
9
  */
43
10
  async function execa(file, args, options) {
44
- const { execa: run } = await Promise.resolve().then(() => __importStar(require('execa')));
11
+ const { execa: run } = await import('execa');
45
12
  return (await run(file, args, options));
46
13
  }
@@ -1,8 +1,7 @@
1
1
  import fs from 'node:fs';
2
- import os from 'node:os';
3
2
  import path from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
4
  import { GENERATED_DOC_FILES, getPackageConfigPath, hasLocalConfig, } from '../../../config/index.js';
5
- import { execa } from '../../../utils/execa.js';
6
5
  import { logger, resolvePackageBin } from '../../../utils/index.js';
7
6
  import { resolveTargetFiles } from '../../targets.js';
8
7
  import { pass, warn, skip } from '../../types.js';
@@ -18,12 +17,66 @@ function loadUserMarkdownConfig(cwd) {
18
17
  return {};
19
18
  }
20
19
  }
21
- function buildMergedConfig(bundledConfigPath, userRules) {
22
- const bundled = JSON.parse(fs.readFileSync(bundledConfigPath, 'utf-8'));
23
- const merged = { ...bundled, ...userRules };
24
- const tmpFile = path.join(os.tmpdir(), `.markdownlint-merged-${process.pid}.json`);
25
- fs.writeFileSync(tmpFile, JSON.stringify(merged, null, 2));
26
- return tmpFile;
20
+ /**
21
+ * Load the markdownlint library, or `null` when it cannot be found.
22
+ *
23
+ * The library rather than `markdownlint-cli2`: the CLI drags in globby →
24
+ * micromatch → braces, which carries an unpatched advisory every client's
25
+ * `npm audit` then reports against pr-checkmate. We already have the file list
26
+ * from git, so the CLI's globbing bought nothing.
27
+ *
28
+ * Resolved through `resolvePackageBin` and loaded by a dynamic `import()` for the
29
+ * same two reasons as the bundled gofmt: the package may live in a fetched
30
+ * profile directory, and it is ESM while we emit CommonJS.
31
+ */
32
+ async function loadMarkdownlint() {
33
+ try {
34
+ const promiseEntry = resolvePackageBin('markdownlint', 'lib/exports-promise.mjs');
35
+ const mainEntry = path.join(path.dirname(promiseEntry), 'exports.mjs');
36
+ const promise = (await import(pathToFileURL(promiseEntry).href));
37
+ const main = (await import(pathToFileURL(mainEntry).href));
38
+ return { lint: promise.lint, readConfig: promise.readConfig, applyFixes: main.applyFixes };
39
+ }
40
+ catch (err) {
41
+ logger.warn(`[Markdown]: ⚠️ markdownlint could not be loaded\n${err}`);
42
+ return null;
43
+ }
44
+ }
45
+ /**
46
+ * The rules to lint with: the repository's own config when it has one, ours
47
+ * (plus the client's `markdownlint.rules`) when it does not. Someone with a
48
+ * `.markdownlint.json` has an opinion; merging ours into it would silently
49
+ * override the rules they wrote.
50
+ */
51
+ async function readLintConfig(lib, cwd, userRules) {
52
+ const local = ['.markdownlint.json', '.markdownlint.jsonc'].find(name => hasLocalConfig([name], cwd));
53
+ if (local)
54
+ return lib.readConfig(path.join(cwd, local));
55
+ if (hasLocalConfig(['.markdownlint.yaml', '.markdownlint.yml'], cwd)) {
56
+ logger.warn('[Markdown]: ⚠️ YAML markdownlint configs are not supported, using bundled rules');
57
+ }
58
+ const bundled = await lib.readConfig(getPackageConfigPath('.markdownlint.json'));
59
+ return { ...bundled, ...userRules };
60
+ }
61
+ /**
62
+ * An ignore pattern as a regular expression over a repo-relative path.
63
+ *
64
+ * A bare directory name excludes its contents; a file name matches exactly; `*`
65
+ * stays within a segment and `**` crosses them. `path.extname` is what tells a
66
+ * directory from a file, and it reads a leading dot as part of the name, so
67
+ * `.claude` is still the directory it is.
68
+ */
69
+ function toIgnoreRegExp(pattern) {
70
+ const clean = pattern.replace(/\/+$/, '');
71
+ const escaped = clean
72
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
73
+ .replace(/\*\*\//g, '\u0001')
74
+ .replace(/\*\*/g, '\u0000')
75
+ .replace(/\*/g, '[^/]*')
76
+ .replace(/\u0001/g, '(?:.*/)?')
77
+ .replace(/\u0000/g, '.*');
78
+ const isDir = !clean.includes('*') && !path.extname(clean);
79
+ return new RegExp(`^${escaped}${isDir ? '(/.*)?' : ''}$`);
27
80
  }
28
81
  export const markdownLintCheck = {
29
82
  name: 'Markdown',
@@ -39,23 +92,10 @@ export const markdownLintCheck = {
39
92
  return skip('no markdown files');
40
93
  const userConfig = loadUserMarkdownConfig(ctx.cwd);
41
94
  const userRules = userConfig.rules ?? {};
42
- let tempConfigFile = null;
43
- let configArg;
44
- if (hasLocalConfig(['.markdownlint.json', '.markdownlint.jsonc', '.markdownlint.yaml', '.markdownlint.yml'], ctx.cwd)) {
45
- configArg = [];
46
- }
47
- else {
48
- const bundledConfig = getPackageConfigPath('.markdownlint.json');
49
- if (Object.keys(userRules).length > 0) {
50
- tempConfigFile = buildMergedConfig(bundledConfig, userRules);
51
- configArg = ['--config', tempConfigFile];
52
- }
53
- else {
54
- configArg = ['--config', bundledConfig];
55
- }
56
- }
57
- const markdownlintBin = resolvePackageBin('markdownlint-cli2', 'markdownlint-cli2-bin.mjs');
58
- const defaultIgnorePatterns = [
95
+ const lib = await loadMarkdownlint();
96
+ if (!lib)
97
+ return warn('markdownlint failed to run (exit 2) — check the markdownlint config');
98
+ const ignores = [
59
99
  'node_modules/**',
60
100
  'dist/**',
61
101
  'coverage/**',
@@ -64,41 +104,38 @@ export const markdownLintCheck = {
64
104
  // Release-tool output, not prose anyone edits — see GENERATED_DOC_FILES.
65
105
  ...GENERATED_DOC_FILES,
66
106
  ...(userConfig.ignores ?? []),
67
- ];
68
- // markdownlint-cli2 has no --ignore-path flag; exclusions are expressed as
69
- // negated globs (`#pattern`). A bare directory name also needs `#name/**`
70
- // to exclude its contents — but a filename does not, and `#CHANGELOG.md/**`
71
- // is a glob that can never match. `path.extname` is what tells them apart,
72
- // and it reads a leading dot as part of the name, so `.claude` is still
73
- // treated as the directory it is.
74
- const ignoreGlobs = defaultIgnorePatterns.flatMap(pattern => {
75
- const clean = pattern.replace(/\/+$/, '');
76
- const globs = [`#${clean}`];
77
- if (!clean.includes('*') && !path.extname(clean))
78
- globs.push(`#${clean}/**`);
79
- return globs;
80
- });
81
- const args = [...(ctx.write ? ['--fix'] : []), ...targets, ...ignoreGlobs, ...configArg];
107
+ ].map(toIgnoreRegExp);
108
+ const files = targets.filter(file => !ignores.some(re => re.test(file)));
109
+ if (files.length === 0)
110
+ return skip('no markdown files');
82
111
  try {
83
- const result = await execa(process.execPath, [markdownlintBin, ...args], {
84
- cwd: ctx.cwd,
85
- reject: false,
86
- stdio: 'inherit',
87
- });
88
- if (result.exitCode === 0)
89
- return pass();
90
- // markdownlint-cli2 exits 1 for lint findings and 2 when it could not run
91
- // (an unreadable config, a bad glob). Reporting the latter as "markdown lint
92
- // issues found" names the wrong cause — and under `severity: error` it
93
- // becomes a gate on a tooling problem.
94
- if (result.exitCode === 2) {
95
- return warn('markdownlint failed to run (exit 2) — check the markdownlint config');
112
+ const config = await readLintConfig(lib, ctx.cwd, userRules);
113
+ const results = await lib.lint({ files: files.map(f => path.resolve(ctx.cwd, f)), config });
114
+ let findings = 0;
115
+ for (const [file, errors] of Object.entries(results)) {
116
+ if (errors.length === 0)
117
+ continue;
118
+ const rel = path.relative(ctx.cwd, file);
119
+ let remaining = errors;
120
+ if (ctx.write && errors.some(e => e.fixInfo)) {
121
+ const fixed = lib.applyFixes(fs.readFileSync(file, 'utf-8'), errors);
122
+ fs.writeFileSync(file, fixed);
123
+ remaining = errors.filter(e => !e.fixInfo);
124
+ }
125
+ for (const e of remaining) {
126
+ findings++;
127
+ const col = e.errorRange?.[0] ? `:${e.errorRange[0]}` : '';
128
+ logger.warn(`${rel}:${e.lineNumber}${col} ${e.ruleNames.join('/')} ${e.ruleDescription}` +
129
+ (e.errorDetail ? ` [${e.errorDetail}]` : ''));
130
+ }
96
131
  }
97
- return warn('markdown lint issues found');
132
+ return findings === 0 ? pass() : warn('markdown lint issues found');
98
133
  }
99
- finally {
100
- if (tempConfigFile && fs.existsSync(tempConfigFile))
101
- fs.unlinkSync(tempConfigFile);
134
+ catch (err) {
135
+ // An unreadable config or a file that vanished: the tool could not run,
136
+ // which is not the same claim as "the prose has problems".
137
+ logger.warn(`[Markdown]: ⚠️ ${err}`);
138
+ return warn('markdownlint failed to run (exit 2) — check the markdownlint config');
102
139
  }
103
140
  },
104
141
  };
@@ -86,7 +86,7 @@ export const PROFILES = [
86
86
  },
87
87
  {
88
88
  name: 'markdown',
89
- packages: ['markdownlint-cli2'],
89
+ packages: ['markdownlint'],
90
90
  checks: ['Markdown'],
91
91
  },
92
92
  {
@@ -69,9 +69,6 @@
69
69
  "cpu": [
70
70
  "arm64"
71
71
  ],
72
- "libc": [
73
- "glibc"
74
- ],
75
72
  "license": "MIT",
76
73
  "optional": true,
77
74
  "os": [
@@ -85,9 +82,6 @@
85
82
  "cpu": [
86
83
  "arm64"
87
84
  ],
88
- "libc": [
89
- "musl"
90
- ],
91
85
  "license": "MIT",
92
86
  "optional": true,
93
87
  "os": [
@@ -101,9 +95,6 @@
101
95
  "cpu": [
102
96
  "x64"
103
97
  ],
104
- "libc": [
105
- "glibc"
106
- ],
107
98
  "license": "MIT",
108
99
  "optional": true,
109
100
  "os": [
@@ -117,9 +108,6 @@
117
108
  "cpu": [
118
109
  "x64"
119
110
  ],
120
- "libc": [
121
- "musl"
122
- ],
123
111
  "license": "MIT",
124
112
  "optional": true,
125
113
  "os": [
@@ -12,7 +12,7 @@
12
12
  "eslint": "10.11.0",
13
13
  "eslint-config-prettier": "10.1.8",
14
14
  "eslint-plugin-import-x": "4.17.1",
15
- "eslint-plugin-jsdoc": "64.5.4",
15
+ "eslint-plugin-jsdoc": "65.1.0",
16
16
  "eslint-plugin-prettier": "5.5.6",
17
17
  "eslint-plugin-sonarjs": "4.2.1",
18
18
  "@typescript-eslint/eslint-plugin": "8.70.1",
@@ -859,9 +859,6 @@
859
859
  "cpu": [
860
860
  "arm64"
861
861
  ],
862
- "libc": [
863
- "glibc"
864
- ],
865
862
  "license": "MIT",
866
863
  "optional": true,
867
864
  "os": [
@@ -878,9 +875,6 @@
878
875
  "cpu": [
879
876
  "arm64"
880
877
  ],
881
- "libc": [
882
- "musl"
883
- ],
884
878
  "license": "MIT",
885
879
  "optional": true,
886
880
  "os": [
@@ -897,9 +891,6 @@
897
891
  "cpu": [
898
892
  "ppc64"
899
893
  ],
900
- "libc": [
901
- "glibc"
902
- ],
903
894
  "license": "MIT",
904
895
  "optional": true,
905
896
  "os": [
@@ -916,9 +907,6 @@
916
907
  "cpu": [
917
908
  "riscv64"
918
909
  ],
919
- "libc": [
920
- "glibc"
921
- ],
922
910
  "license": "MIT",
923
911
  "optional": true,
924
912
  "os": [
@@ -935,9 +923,6 @@
935
923
  "cpu": [
936
924
  "riscv64"
937
925
  ],
938
- "libc": [
939
- "musl"
940
- ],
941
926
  "license": "MIT",
942
927
  "optional": true,
943
928
  "os": [
@@ -954,9 +939,6 @@
954
939
  "cpu": [
955
940
  "s390x"
956
941
  ],
957
- "libc": [
958
- "glibc"
959
- ],
960
942
  "license": "MIT",
961
943
  "optional": true,
962
944
  "os": [
@@ -973,9 +955,6 @@
973
955
  "cpu": [
974
956
  "x64"
975
957
  ],
976
- "libc": [
977
- "glibc"
978
- ],
979
958
  "license": "MIT",
980
959
  "optional": true,
981
960
  "os": [
@@ -992,9 +971,6 @@
992
971
  "cpu": [
993
972
  "x64"
994
973
  ],
995
- "libc": [
996
- "musl"
997
- ],
998
974
  "license": "MIT",
999
975
  "optional": true,
1000
976
  "os": [
@@ -2156,9 +2132,9 @@
2156
2132
  }
2157
2133
  },
2158
2134
  "node_modules/brace-expansion": {
2159
- "version": "5.0.9",
2160
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
2161
- "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
2135
+ "version": "5.0.12",
2136
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
2137
+ "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
2162
2138
  "license": "MIT",
2163
2139
  "dependencies": {
2164
2140
  "balanced-match": "^4.0.2"
@@ -2608,14 +2584,14 @@
2608
2584
  }
2609
2585
  },
2610
2586
  "node_modules/eslint-plugin-jsdoc": {
2611
- "version": "64.5.4",
2612
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-64.5.4.tgz",
2613
- "integrity": "sha512-xfRhXPSSWT612muJ6XTvxuVJ8zYHv99qNgBqPVqF28aSqoy4s4XbSkrWXnYA2hl5ejC02yEpk6fqkj3BmJ6Xbg==",
2587
+ "version": "65.1.0",
2588
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-65.1.0.tgz",
2589
+ "integrity": "sha512-P7levv6MorzYZ85Yy/UVOAY9FKxwU6NJ9+c02QPYhzoIVg007OCtMi+9na8Xkho64Bu89QguoLSxH78YSmy1Zg==",
2614
2590
  "license": "BSD-3-Clause",
2615
2591
  "dependencies": {
2616
2592
  "@es-joy/jsdoccomment": "~0.98.0",
2617
2593
  "@es-joy/resolve.exports": "1.2.0",
2618
- "@typescript-eslint/utils": "^8.70.0",
2594
+ "@typescript-eslint/utils": "^8.70.1",
2619
2595
  "are-docs-informative": "^0.1.1",
2620
2596
  "comment-parser": "1.4.9",
2621
2597
  "debug": "^4.4.3",
@@ -3126,9 +3102,9 @@
3126
3102
  "license": "MIT"
3127
3103
  },
3128
3104
  "node_modules/http-cache-semantics": {
3129
- "version": "4.2.0",
3130
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
3131
- "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
3105
+ "version": "4.3.0",
3106
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.3.0.tgz",
3107
+ "integrity": "sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==",
3132
3108
  "license": "BSD-2-Clause"
3133
3109
  },
3134
3110
  "node_modules/http-proxy-agent": {
@@ -3209,9 +3185,9 @@
3209
3185
  }
3210
3186
  },
3211
3187
  "node_modules/ip-address": {
3212
- "version": "10.3.1",
3213
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.3.1.tgz",
3214
- "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==",
3188
+ "version": "10.7.3",
3189
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz",
3190
+ "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==",
3215
3191
  "license": "MIT",
3216
3192
  "engines": {
3217
3193
  "node": ">= 12"
@@ -5022,9 +4998,9 @@
5022
4998
  }
5023
4999
  },
5024
5000
  "node_modules/undici": {
5025
- "version": "6.28.0",
5026
- "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz",
5027
- "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==",
5001
+ "version": "6.29.0",
5002
+ "resolved": "https://registry.npmjs.org/undici/-/undici-6.29.0.tgz",
5003
+ "integrity": "sha512-R+RODBqp6i2pPflGdq+xIOUkl+RNfGgHwoinecKu/JCuf2uO06cOKoDbI2P7Dn6KcswdKwrczbU6IYJ6K8X+wg==",
5028
5004
  "license": "MIT",
5029
5005
  "engines": {
5030
5006
  "node": ">=18.17"
@@ -6,7 +6,7 @@
6
6
  "eslint": "10.11.0",
7
7
  "eslint-config-prettier": "10.1.8",
8
8
  "eslint-plugin-import-x": "4.17.1",
9
- "eslint-plugin-jsdoc": "64.5.4",
9
+ "eslint-plugin-jsdoc": "65.1.0",
10
10
  "eslint-plugin-prettier": "5.5.6",
11
11
  "eslint-plugin-sonarjs": "4.2.1",
12
12
  "@typescript-eslint/eslint-plugin": "8.70.1",
@@ -8,54 +8,7 @@
8
8
  "name": "pr-checkmate-profile-markdown",
9
9
  "version": "1.0.0",
10
10
  "dependencies": {
11
- "markdownlint-cli2": "0.23.3"
12
- }
13
- },
14
- "node_modules/@nodelib/fs.scandir": {
15
- "version": "2.1.5",
16
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
17
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
18
- "license": "MIT",
19
- "dependencies": {
20
- "@nodelib/fs.stat": "2.0.5",
21
- "run-parallel": "^1.1.9"
22
- },
23
- "engines": {
24
- "node": ">= 8"
25
- }
26
- },
27
- "node_modules/@nodelib/fs.stat": {
28
- "version": "2.0.5",
29
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
30
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
31
- "license": "MIT",
32
- "engines": {
33
- "node": ">= 8"
34
- }
35
- },
36
- "node_modules/@nodelib/fs.walk": {
37
- "version": "1.2.8",
38
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
39
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
40
- "license": "MIT",
41
- "dependencies": {
42
- "@nodelib/fs.scandir": "2.1.5",
43
- "fastq": "^1.6.0"
44
- },
45
- "engines": {
46
- "node": ">= 8"
47
- }
48
- },
49
- "node_modules/@sindresorhus/merge-streams": {
50
- "version": "4.0.0",
51
- "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
52
- "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
53
- "license": "MIT",
54
- "engines": {
55
- "node": ">=18"
56
- },
57
- "funding": {
58
- "url": "https://github.com/sponsors/sindresorhus"
11
+ "markdownlint": "0.41.1"
59
12
  }
60
13
  },
61
14
  "node_modules/@types/debug": {
@@ -97,24 +50,6 @@
97
50
  "url": "https://github.com/chalk/ansi-regex?sponsor=1"
98
51
  }
99
52
  },
100
- "node_modules/argparse": {
101
- "version": "2.0.1",
102
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
103
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
104
- "license": "Python-2.0"
105
- },
106
- "node_modules/braces": {
107
- "version": "3.0.3",
108
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
109
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
110
- "license": "MIT",
111
- "dependencies": {
112
- "fill-range": "^7.1.1"
113
- },
114
- "engines": {
115
- "node": ">=8"
116
- }
117
- },
118
53
  "node_modules/character-entities": {
119
54
  "version": "2.0.2",
120
55
  "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
@@ -197,55 +132,6 @@
197
132
  "url": "https://github.com/sponsors/wooorm"
198
133
  }
199
134
  },
200
- "node_modules/fast-glob": {
201
- "version": "3.3.3",
202
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
203
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
204
- "license": "MIT",
205
- "dependencies": {
206
- "@nodelib/fs.stat": "^2.0.2",
207
- "@nodelib/fs.walk": "^1.2.3",
208
- "glob-parent": "^5.1.2",
209
- "merge2": "^1.3.0",
210
- "micromatch": "^4.0.8"
211
- },
212
- "engines": {
213
- "node": ">=8.6.0"
214
- }
215
- },
216
- "node_modules/fast-glob/node_modules/glob-parent": {
217
- "version": "5.1.2",
218
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
219
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
220
- "license": "ISC",
221
- "dependencies": {
222
- "is-glob": "^4.0.1"
223
- },
224
- "engines": {
225
- "node": ">= 6"
226
- }
227
- },
228
- "node_modules/fastq": {
229
- "version": "1.20.3",
230
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz",
231
- "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==",
232
- "license": "ISC",
233
- "dependencies": {
234
- "reusify": "^1.0.4"
235
- }
236
- },
237
- "node_modules/fill-range": {
238
- "version": "7.1.1",
239
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
240
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
241
- "license": "MIT",
242
- "dependencies": {
243
- "to-regex-range": "^5.0.1"
244
- },
245
- "engines": {
246
- "node": ">=8"
247
- }
248
- },
249
135
  "node_modules/get-east-asian-width": {
250
136
  "version": "1.6.0",
251
137
  "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
@@ -258,48 +144,6 @@
258
144
  "url": "https://github.com/sponsors/sindresorhus"
259
145
  }
260
146
  },
261
- "node_modules/globby": {
262
- "version": "16.2.4",
263
- "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.4.tgz",
264
- "integrity": "sha512-c8B/VNLmxRcmqqenRA9t+9IyOjf9+V6lTxPaUJLqOCONdQkWZ0ETYgX0qbtJqPsgCNusT9MZ5Jeidw8Eb9tn2g==",
265
- "license": "MIT",
266
- "dependencies": {
267
- "@sindresorhus/merge-streams": "^4.0.0",
268
- "fast-glob": "^3.3.3",
269
- "ignore": "^7.0.5",
270
- "is-path-inside": "^4.0.0",
271
- "micromatch": "^4.0.8",
272
- "slash": "^5.1.0",
273
- "unicorn-magic": "^0.4.0"
274
- },
275
- "engines": {
276
- "node": ">=20"
277
- },
278
- "funding": {
279
- "url": "https://github.com/sponsors/sindresorhus"
280
- }
281
- },
282
- "node_modules/globby/node_modules/unicorn-magic": {
283
- "version": "0.4.1",
284
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.1.tgz",
285
- "integrity": "sha512-lzlXPoVB0Uy/FvTaUgX39RbixYiSKoc3JSoSf01+0c2B6FR3qdYIPN7Qjo/AV7n6sqLCk0509cT3LRj1oSZ1+A==",
286
- "license": "MIT",
287
- "engines": {
288
- "node": ">=20"
289
- },
290
- "funding": {
291
- "url": "https://github.com/sponsors/sindresorhus"
292
- }
293
- },
294
- "node_modules/ignore": {
295
- "version": "7.0.5",
296
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
297
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
298
- "license": "MIT",
299
- "engines": {
300
- "node": ">= 4"
301
- }
302
- },
303
147
  "node_modules/is-alphabetical": {
304
148
  "version": "2.0.1",
305
149
  "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
@@ -334,27 +178,6 @@
334
178
  "url": "https://github.com/sponsors/wooorm"
335
179
  }
336
180
  },
337
- "node_modules/is-extglob": {
338
- "version": "2.1.1",
339
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
340
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
341
- "license": "MIT",
342
- "engines": {
343
- "node": ">=0.10.0"
344
- }
345
- },
346
- "node_modules/is-glob": {
347
- "version": "4.0.3",
348
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
349
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
350
- "license": "MIT",
351
- "dependencies": {
352
- "is-extglob": "^2.1.1"
353
- },
354
- "engines": {
355
- "node": ">=0.10.0"
356
- }
357
- },
358
181
  "node_modules/is-hexadecimal": {
359
182
  "version": "2.0.1",
360
183
  "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
@@ -365,42 +188,6 @@
365
188
  "url": "https://github.com/sponsors/wooorm"
366
189
  }
367
190
  },
368
- "node_modules/is-number": {
369
- "version": "7.0.0",
370
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
371
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
372
- "license": "MIT",
373
- "engines": {
374
- "node": ">=0.12.0"
375
- }
376
- },
377
- "node_modules/is-path-inside": {
378
- "version": "4.0.0",
379
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
380
- "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
381
- "license": "MIT",
382
- "engines": {
383
- "node": ">=12"
384
- },
385
- "funding": {
386
- "url": "https://github.com/sponsors/sindresorhus"
387
- }
388
- },
389
- "node_modules/jsonc-parser": {
390
- "version": "3.3.1",
391
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
392
- "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
393
- "license": "MIT"
394
- },
395
- "node_modules/jsonpointer": {
396
- "version": "5.0.1",
397
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
398
- "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
399
- "license": "MIT",
400
- "engines": {
401
- "node": ">=0.10.0"
402
- }
403
- },
404
191
  "node_modules/katex": {
405
192
  "version": "0.16.47",
406
193
  "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz",
@@ -449,146 +236,6 @@
449
236
  "url": "https://github.com/sponsors/DavidAnson"
450
237
  }
451
238
  },
452
- "node_modules/markdownlint-cli2": {
453
- "version": "0.23.3",
454
- "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.23.3.tgz",
455
- "integrity": "sha512-xAr5o/TGpC3v6lE6cKIW4b5eOFRrRX5u7Vtjae9ix3RALv8nNOd94XMkD/1OXXBtpMcJ4uQGbpSo3hv5UqS4uQ==",
456
- "license": "MIT",
457
- "dependencies": {
458
- "globby": "16.2.4",
459
- "js-yaml": "5.4.1",
460
- "jsonc-parser": "3.3.1",
461
- "jsonpointer": "5.0.1",
462
- "markdown-it": "15.0.1",
463
- "markdownlint": "0.41.1",
464
- "markdownlint-cli2-formatter-default": "0.0.6",
465
- "micromatch": "4.0.8",
466
- "smol-toml": "1.8.0"
467
- },
468
- "bin": {
469
- "markdownlint-cli2": "markdownlint-cli2-bin.mjs"
470
- },
471
- "engines": {
472
- "node": ">=22"
473
- },
474
- "funding": {
475
- "url": "https://github.com/sponsors/DavidAnson"
476
- }
477
- },
478
- "node_modules/markdownlint-cli2-formatter-default": {
479
- "version": "0.0.6",
480
- "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.6.tgz",
481
- "integrity": "sha512-VVDGKsq9sgzu378swJ0fcHfSicUnMxnL8gnLm/Q4J/xsNJ4e5bA6lvAz7PCzIl0/No0lHyaWdqVD2jotxOSFMQ==",
482
- "license": "MIT",
483
- "funding": {
484
- "url": "https://github.com/sponsors/DavidAnson"
485
- },
486
- "peerDependencies": {
487
- "markdownlint-cli2": ">=0.0.4"
488
- }
489
- },
490
- "node_modules/markdownlint-cli2/node_modules/entities": {
491
- "version": "8.1.0",
492
- "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz",
493
- "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==",
494
- "license": "BSD-2-Clause",
495
- "engines": {
496
- "node": ">=20.19.0"
497
- },
498
- "funding": {
499
- "url": "https://github.com/fb55/entities?sponsor=1"
500
- }
501
- },
502
- "node_modules/markdownlint-cli2/node_modules/js-yaml": {
503
- "version": "5.4.1",
504
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.4.1.tgz",
505
- "integrity": "sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ==",
506
- "funding": [
507
- {
508
- "type": "github",
509
- "url": "https://github.com/sponsors/puzrin"
510
- },
511
- {
512
- "type": "github",
513
- "url": "https://github.com/sponsors/nodeca"
514
- }
515
- ],
516
- "license": "MIT",
517
- "dependencies": {
518
- "argparse": "^2.0.1"
519
- },
520
- "bin": {
521
- "js-yaml": "bin/js-yaml.mjs"
522
- }
523
- },
524
- "node_modules/markdownlint-cli2/node_modules/linkify-it": {
525
- "version": "6.1.0",
526
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-6.1.0.tgz",
527
- "integrity": "sha512-wJ/TwpSDTLepCrQoYWYIExIKg5Zchex2Nn5yk2mFnB+6PtdkHtyLx742md9csRjjOnGkKIS/RrbY7l8D6gT9Vw==",
528
- "funding": [
529
- {
530
- "type": "github",
531
- "url": "https://github.com/sponsors/puzrin"
532
- },
533
- {
534
- "type": "github",
535
- "url": "https://github.com/sponsors/markdown-it"
536
- }
537
- ],
538
- "license": "MIT",
539
- "dependencies": {
540
- "uc.micro": "^3.0.0"
541
- }
542
- },
543
- "node_modules/markdownlint-cli2/node_modules/markdown-it": {
544
- "version": "15.0.1",
545
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-15.0.1.tgz",
546
- "integrity": "sha512-9/7gE95FNPkfUWrjJIoHZza2iLmuJlPD0UNMxPi7bxUrbCR525YZY0r+zyfes0dZI5ZZ/uNIXUJca0pJvtw41g==",
547
- "funding": [
548
- {
549
- "type": "github",
550
- "url": "https://github.com/sponsors/puzrin"
551
- },
552
- {
553
- "type": "github",
554
- "url": "https://github.com/sponsors/markdown-it"
555
- }
556
- ],
557
- "license": "MIT",
558
- "dependencies": {
559
- "argparse": "^3.0.0",
560
- "entities": "^8.0.0",
561
- "linkify-it": "^6.0.0",
562
- "mdurl": "^2.1.0",
563
- "punycode.js": "^2.3.1",
564
- "uc.micro": "^3.0.0"
565
- },
566
- "bin": {
567
- "markdown-it": "bin/markdown-it.mjs"
568
- }
569
- },
570
- "node_modules/markdownlint-cli2/node_modules/markdown-it/node_modules/argparse": {
571
- "version": "3.0.2",
572
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-3.0.2.tgz",
573
- "integrity": "sha512-mFdDM6WqWKraGLsVb+C9CahPnzTXOefAOLq3jYcca2YZ8bEWpr++Tzj+zSaKW9+X9L5uSxcm1AZ3Y6aZJ09OhQ==",
574
- "funding": [
575
- {
576
- "type": "github",
577
- "url": "https://github.com/sponsors/puzrin"
578
- },
579
- {
580
- "type": "github",
581
- "url": "https://github.com/sponsors/nodeca"
582
- }
583
- ],
584
- "license": "PSF-2.0"
585
- },
586
- "node_modules/markdownlint-cli2/node_modules/uc.micro": {
587
- "version": "3.0.0",
588
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-3.0.0.tgz",
589
- "integrity": "sha512-U3PppEkleoTnIfi8BozMx3yju3qc/L6SwqWo2Sw+54PX+PX0q9I+r1Um5HCmqD7n9VDX5/v3vQH/AjA6deDdtw==",
590
- "license": "MIT"
591
- },
592
239
  "node_modules/markdownlint/node_modules/string-width": {
593
240
  "version": "8.2.1",
594
241
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
@@ -605,21 +252,6 @@
605
252
  "url": "https://github.com/sponsors/sindresorhus"
606
253
  }
607
254
  },
608
- "node_modules/mdurl": {
609
- "version": "2.1.0",
610
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz",
611
- "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==",
612
- "license": "MIT"
613
- },
614
- "node_modules/merge2": {
615
- "version": "1.4.1",
616
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
617
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
618
- "license": "MIT",
619
- "engines": {
620
- "node": ">= 8"
621
- }
622
- },
623
255
  "node_modules/micromark": {
624
256
  "version": "4.0.2",
625
257
  "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
@@ -1131,31 +763,6 @@
1131
763
  ],
1132
764
  "license": "MIT"
1133
765
  },
1134
- "node_modules/micromatch": {
1135
- "version": "4.0.8",
1136
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1137
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1138
- "license": "MIT",
1139
- "dependencies": {
1140
- "braces": "^3.0.3",
1141
- "picomatch": "^2.3.1"
1142
- },
1143
- "engines": {
1144
- "node": ">=8.6"
1145
- }
1146
- },
1147
- "node_modules/micromatch/node_modules/picomatch": {
1148
- "version": "2.3.2",
1149
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
1150
- "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
1151
- "license": "MIT",
1152
- "engines": {
1153
- "node": ">=8.6"
1154
- },
1155
- "funding": {
1156
- "url": "https://github.com/sponsors/jonschlinkert"
1157
- }
1158
- },
1159
766
  "node_modules/ms": {
1160
767
  "version": "2.1.3",
1161
768
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -1181,92 +788,6 @@
1181
788
  "url": "https://github.com/sponsors/wooorm"
1182
789
  }
1183
790
  },
1184
- "node_modules/punycode.js": {
1185
- "version": "2.3.1",
1186
- "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
1187
- "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
1188
- "license": "MIT",
1189
- "engines": {
1190
- "node": ">=6"
1191
- }
1192
- },
1193
- "node_modules/queue-microtask": {
1194
- "version": "1.2.3",
1195
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1196
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1197
- "funding": [
1198
- {
1199
- "type": "github",
1200
- "url": "https://github.com/sponsors/feross"
1201
- },
1202
- {
1203
- "type": "patreon",
1204
- "url": "https://www.patreon.com/feross"
1205
- },
1206
- {
1207
- "type": "consulting",
1208
- "url": "https://feross.org/support"
1209
- }
1210
- ],
1211
- "license": "MIT"
1212
- },
1213
- "node_modules/reusify": {
1214
- "version": "1.1.0",
1215
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
1216
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
1217
- "license": "MIT",
1218
- "engines": {
1219
- "iojs": ">=1.0.0",
1220
- "node": ">=0.10.0"
1221
- }
1222
- },
1223
- "node_modules/run-parallel": {
1224
- "version": "1.2.0",
1225
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1226
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1227
- "funding": [
1228
- {
1229
- "type": "github",
1230
- "url": "https://github.com/sponsors/feross"
1231
- },
1232
- {
1233
- "type": "patreon",
1234
- "url": "https://www.patreon.com/feross"
1235
- },
1236
- {
1237
- "type": "consulting",
1238
- "url": "https://feross.org/support"
1239
- }
1240
- ],
1241
- "license": "MIT",
1242
- "dependencies": {
1243
- "queue-microtask": "^1.2.2"
1244
- }
1245
- },
1246
- "node_modules/slash": {
1247
- "version": "5.1.0",
1248
- "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
1249
- "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
1250
- "license": "MIT",
1251
- "engines": {
1252
- "node": ">=14.16"
1253
- },
1254
- "funding": {
1255
- "url": "https://github.com/sponsors/sindresorhus"
1256
- }
1257
- },
1258
- "node_modules/smol-toml": {
1259
- "version": "1.8.0",
1260
- "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz",
1261
- "integrity": "sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==",
1262
- "license": "BSD-3-Clause",
1263
- "engines": {
1264
- "node": ">= 18"
1265
- },
1266
- "funding": {
1267
- "url": "https://github.com/sponsors/cyyynthia"
1268
- }
1269
- },
1270
791
  "node_modules/strip-ansi": {
1271
792
  "version": "7.1.2",
1272
793
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
@@ -1281,18 +802,6 @@
1281
802
  "funding": {
1282
803
  "url": "https://github.com/chalk/strip-ansi?sponsor=1"
1283
804
  }
1284
- },
1285
- "node_modules/to-regex-range": {
1286
- "version": "5.0.1",
1287
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1288
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1289
- "license": "MIT",
1290
- "dependencies": {
1291
- "is-number": "^7.0.0"
1292
- },
1293
- "engines": {
1294
- "node": ">=8.0"
1295
- }
1296
805
  }
1297
806
  }
1298
807
  }
@@ -2,7 +2,7 @@
2
2
  "name": "pr-checkmate-profile-markdown",
3
3
  "version": "1.0.0",
4
4
  "dependencies": {
5
- "markdownlint-cli2": "0.23.3"
5
+ "markdownlint": "0.41.1"
6
6
  },
7
7
  "private": true
8
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pr-checkmate",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "Security-first PR gate for CI: secret scanning, grype dependency scanning, SBOM — plus linting and formatting across 11 languages",
5
5
  "keywords": [
6
6
  "github-actions",
@@ -91,7 +91,7 @@
91
91
  "eslint": "^10.8.1",
92
92
  "eslint-config-prettier": "^10.1.8",
93
93
  "eslint-plugin-import-x": "^4.17.1",
94
- "eslint-plugin-jsdoc": "^64.2.1",
94
+ "eslint-plugin-jsdoc": "^65.1.0",
95
95
  "eslint-plugin-prettier": "^5.5.6",
96
96
  "eslint-plugin-sonarjs": "^4.2.0",
97
97
  "execa": "^9.6.0",
@@ -100,7 +100,7 @@
100
100
  "jscpd": "^5.0.16",
101
101
  "knip": "^6.32.2",
102
102
  "license-checker-rseidelsohn": "^5.0.1",
103
- "markdownlint-cli2": "^0.23.1",
103
+ "markdownlint": "^0.41.1",
104
104
  "prettier": "^3.9.6",
105
105
  "ts-node": "^10.9.1",
106
106
  "ts-unused-exports": "^11.0.1",