remark-flexible-toc 1.2.3 → 1.2.4
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.
- package/README.md +12 -4
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/package.json +10 -10
- package/src/index.ts +3 -2
package/README.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
### [Become a sponsor](https://github.com/sponsors/ipikuka) 🚀
|
|
2
|
+
|
|
3
|
+
If you find **`remark-flexible-toc`** useful in your projects, consider supporting my work.
|
|
4
|
+
Your sponsorship means a lot 💖
|
|
5
|
+
|
|
6
|
+
Be the **first sponsor** and get featured here and on [my sponsor wall](https://github.com/sponsors/ipikuka).
|
|
7
|
+
Thank you for supporting open source! 🙌
|
|
8
|
+
|
|
1
9
|
# remark-flexible-toc
|
|
2
10
|
|
|
3
11
|
[![npm version][badge-npm-version]][url-npm-package]
|
|
@@ -17,7 +25,7 @@ This package is a [**unified**][unified] ([**remark**][remark]) plugin **to expo
|
|
|
17
25
|
## When should I use this?
|
|
18
26
|
|
|
19
27
|
**`remark-flexible-toc`** is useful if you want to get the table of contents (TOC) from the markdown/MDX document. It exposes the table of contents (TOC) in two ways:
|
|
20
|
-
+ by adding
|
|
28
|
+
+ by adding a `toc` object into `Vfile.data`
|
|
21
29
|
+ by mutating a reference array if provided in the options
|
|
22
30
|
|
|
23
31
|
## Installation
|
|
@@ -153,7 +161,7 @@ use(remarkFlexibleToc, {
|
|
|
153
161
|
skipParents?: Exclude<HeadingParent, "root">[]; // default: []
|
|
154
162
|
exclude?: string | string[];
|
|
155
163
|
prefix?: string;
|
|
156
|
-
|
|
164
|
+
callback?: (toc: TocItem[]) => undefined;
|
|
157
165
|
} as FlexibleTocOptions);
|
|
158
166
|
```
|
|
159
167
|
|
|
@@ -182,7 +190,7 @@ If you use _typescript_, the array reference should be `const toc: TocItem[] = [
|
|
|
182
190
|
const toc = [];
|
|
183
191
|
|
|
184
192
|
use(remarkFlexibleToc, {
|
|
185
|
-
tocRef: toc; //
|
|
193
|
+
tocRef: toc; // `remark-flexible-toc` mutates the array of reference
|
|
186
194
|
});
|
|
187
195
|
```
|
|
188
196
|
|
|
@@ -286,7 +294,7 @@ type TocItem = {
|
|
|
286
294
|
> [!NOTE]
|
|
287
295
|
> If there is a remark plugin before **`remark-flexible-toc`** in the plugin chain, which provides custom id for headings like **`remark-heading-id`**, that custom id takes precedence for `href`.
|
|
288
296
|
|
|
289
|
-
**`remark-flexible-toc`** uses
|
|
297
|
+
**`remark-flexible-toc`** uses **`github-slugger`** internally for producing unique links. Then, it is possible you to use [**rehype-slug**][rehype-slug] (forIDs on headings) and [**rehype-autolink-headings**][rehype-autolink-headings] (for anchors that link-to-self) because they use the same **`github-slugger`**.
|
|
290
298
|
|
|
291
299
|
As an example for the unique heading links (notice the same heading texts).
|
|
292
300
|
|
package/dist/esm/index.js
CHANGED
|
@@ -39,7 +39,8 @@ function addNumbering(arr) {
|
|
|
39
39
|
() => 1),
|
|
40
40
|
];
|
|
41
41
|
}
|
|
42
|
-
else
|
|
42
|
+
else {
|
|
43
|
+
// if (depth < prevDepth)
|
|
43
44
|
numbering = prevNumbering.slice(0, depth);
|
|
44
45
|
numbering[depth - 1]++;
|
|
45
46
|
}
|
|
@@ -56,7 +57,7 @@ const RemarkFlexibleToc = (options) => {
|
|
|
56
57
|
const slugger = new GithubSlugger();
|
|
57
58
|
const tocItems = [];
|
|
58
59
|
visit(tree, "heading", (_node, _index, _parent) => {
|
|
59
|
-
/* v8 ignore next */
|
|
60
|
+
/* v8 ignore next -- @preserve */
|
|
60
61
|
if (!_parent || typeof _index === "undefined")
|
|
61
62
|
return;
|
|
62
63
|
const depth = _node.depth;
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAqDhD,MAAM,gBAAgB,GAAuB;IAC3C,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC,CAAC,CAAC;IACf,WAAW,EAAE,EAAE;CAChB,CAAC;AAIF;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,GAAc;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAE5B,IAAI,SAAS,GAAa,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9D,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;YAC/B,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YAC7B,SAAS,GAAG;gBACV,GAAG,aAAa;gBAChB,GAAI,KAAK,CAAC,IAAI,CACZ,EAAE,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE,EAAE,wEAAwE;gBACvG,GAAG,EAAE,CAAC,CAAC,CACW;aACrB,CAAC;QACJ,CAAC;aAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "remark-flexible-toc",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "Remark plugin to expose the table of contents via Vfile.data or via an option reference",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": "./dist/esm/index.js",
|
|
@@ -48,16 +48,16 @@
|
|
|
48
48
|
"url": "https://github.com/ipikuka/remark-flexible-toc/issues"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@eslint/js": "^9.
|
|
52
|
-
"@types/node": "^24.
|
|
51
|
+
"@eslint/js": "^9.39.1",
|
|
52
|
+
"@types/node": "^24.10.0",
|
|
53
53
|
"@types/remark-heading-id": "^1.0.0",
|
|
54
|
-
"@vitest/coverage-v8": "^
|
|
55
|
-
"@vitest/eslint-plugin": "^1.
|
|
54
|
+
"@vitest/coverage-v8": "^4.0.6",
|
|
55
|
+
"@vitest/eslint-plugin": "^1.4.0",
|
|
56
56
|
"dedent": "^1.7.0",
|
|
57
|
-
"eslint": "^9.
|
|
57
|
+
"eslint": "^9.39.1",
|
|
58
58
|
"eslint-config-prettier": "^10.1.8",
|
|
59
59
|
"eslint-plugin-prettier": "^5.5.4",
|
|
60
|
-
"globals": "^16.
|
|
60
|
+
"globals": "^16.5.0",
|
|
61
61
|
"prettier": "^3.6.2",
|
|
62
62
|
"rehype-format": "^5.0.1",
|
|
63
63
|
"rehype-stringify": "^10.0.1",
|
|
@@ -65,12 +65,12 @@
|
|
|
65
65
|
"remark-heading-id": "^1.0.1",
|
|
66
66
|
"remark-parse": "^11.0.0",
|
|
67
67
|
"remark-rehype": "^11.1.2",
|
|
68
|
-
"rimraf": "^6.0
|
|
68
|
+
"rimraf": "^6.1.0",
|
|
69
69
|
"type-coverage": "^2.29.7",
|
|
70
70
|
"typescript": "^5.9.3",
|
|
71
|
-
"typescript-eslint": "^8.46.
|
|
71
|
+
"typescript-eslint": "^8.46.3",
|
|
72
72
|
"unified": "^11.0.5",
|
|
73
|
-
"vitest": "^
|
|
73
|
+
"vitest": "^4.0.6"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
76
|
"@types/mdast": "^4.0.4",
|
package/src/index.ts
CHANGED
|
@@ -98,7 +98,8 @@ function addNumbering(arr: TocItem[]) {
|
|
|
98
98
|
() => 1,
|
|
99
99
|
) as HeadingDepth[]),
|
|
100
100
|
];
|
|
101
|
-
} else
|
|
101
|
+
} else {
|
|
102
|
+
// if (depth < prevDepth)
|
|
102
103
|
numbering = prevNumbering.slice(0, depth);
|
|
103
104
|
numbering[depth - 1]++;
|
|
104
105
|
}
|
|
@@ -125,7 +126,7 @@ const RemarkFlexibleToc: Plugin<[FlexibleTocOptions?], Root> = (options) => {
|
|
|
125
126
|
const tocItems: TocItem[] = [];
|
|
126
127
|
|
|
127
128
|
visit(tree, "heading", (_node, _index, _parent) => {
|
|
128
|
-
/* v8 ignore next */
|
|
129
|
+
/* v8 ignore next -- @preserve */
|
|
129
130
|
if (!_parent || typeof _index === "undefined") return;
|
|
130
131
|
|
|
131
132
|
const depth = _node.depth;
|