@altano/remark-mdx-toc-with-slugs 3.0.2 → 4.0.1

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/dist/index.d.ts CHANGED
@@ -1,15 +1,18 @@
1
- import type { RemarkMdxTocOptions, TocEntry } from "@altano/remark-mdx-toc";
2
- import type { Plugin } from "unified";
3
- export type TableOfContentsEntry = TocEntry & {
4
- slug: string;
5
- children: TableOfContentsEntry[];
1
+ import { RemarkMdxTocOptions, TocEntry } from "@altano/remark-mdx-toc";
2
+ import { Plugin } from "unified";
3
+
4
+ //#region src/index.d.ts
5
+ type TableOfContentsEntry = TocEntry & {
6
+ slug: string;
7
+ children: TableOfContentsEntry[];
6
8
  };
7
- export type RemarkMdxTocWithSlugsOptions = RemarkMdxTocOptions;
9
+ type RemarkMdxTocWithSlugsOptions = RemarkMdxTocOptions;
8
10
  /**
9
- * Remark plugin that, given a tree that has had remark-mdx-toc run over it
10
- * already, the toc data will be enhanced to have auto-generated slugs for every
11
- * heading. This uses github-slugger
12
- */
11
+ * Remark plugin that, given a tree that has had remark-mdx-toc run over it
12
+ * already, the toc data will be enhanced to have auto-generated slugs for every
13
+ * heading. This uses github-slugger
14
+ */
13
15
  declare const remarkMdxTocWithSlugs: Plugin<[RemarkMdxTocWithSlugsOptions?]>;
14
- export default remarkMdxTocWithSlugs;
16
+ //#endregion
17
+ export { RemarkMdxTocWithSlugsOptions, TableOfContentsEntry, remarkMdxTocWithSlugs as default };
15
18
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,55 +1,55 @@
1
1
  import { generate } from "astring";
2
2
  import { valueToEstree } from "estree-util-value-to-estree";
3
- import { EXIT, visit as estreeVisit } from "estree-util-visit";
3
+ import { EXIT, visit } from "estree-util-visit";
4
4
  import GithubSlugger from "github-slugger";
5
5
  import remarkMdxToc from "@altano/remark-mdx-toc";
6
- import { visit } from "unist-util-visit";
6
+ import { visit as visit$1 } from "unist-util-visit";
7
+
8
+ //#region src/index.ts
7
9
  function sluggifyTocEntries(entries, headingSlugger = new GithubSlugger()) {
8
- return entries.map((entry) => sluggifyTocEntry(entry, headingSlugger));
10
+ return entries.map((entry) => sluggifyTocEntry(entry, headingSlugger));
9
11
  }
10
12
  function sluggifyTocEntry(entry, headingSlugger) {
11
- return {
12
- ...entry,
13
- slug: headingSlugger.slug(entry.value),
14
- children: sluggifyTocEntries(entry.children, headingSlugger)
15
- };
13
+ return {
14
+ ...entry,
15
+ slug: headingSlugger.slug(entry.value),
16
+ children: sluggifyTocEntries(entry.children, headingSlugger)
17
+ };
16
18
  }
17
19
  function assertMdxjsEsmNode(node) {
18
- if (node.type !== "mdxjsEsm") {
19
- throw new Error(`Node was unexpected type: ${node.type}`);
20
- }
20
+ if (node.type !== "mdxjsEsm") throw new Error(`Node was unexpected type: ${node.type}`);
21
21
  }
22
+ /**
23
+ * Remark plugin that, given a tree that has had remark-mdx-toc run over it
24
+ * already, the toc data will be enhanced to have auto-generated slugs for every
25
+ * heading. This uses github-slugger
26
+ */
22
27
  const remarkMdxTocWithSlugs = function(options = {}) {
23
- const mdxTocTransformer = remarkMdxToc.call(this, options);
24
- const name = options.name ?? "toc";
25
- return function mdxTocWithSlugsTransformer(ast, ...args) {
26
- const result = mdxTocTransformer(ast, ...args);
27
- if (result instanceof Promise) {
28
- throw new Error(`Wasn't expected remark-mdx-toc to be an async plugin`);
29
- }
30
- const mdast = ast;
31
- visit(mdast, ["mdxjsEsm"], (mdxNode) => {
32
- assertMdxjsEsmNode(mdxNode);
33
- const estree = mdxNode.data?.estree;
34
- if (estree) {
35
- estreeVisit(estree, (esNode) => {
36
- if (esNode.type === "VariableDeclarator" && esNode.id.type === "Identifier" && esNode.id.name === name && esNode.init) {
37
- const tocExportString = generate(esNode.init);
38
- const toc = JSON.parse(tocExportString);
39
- const tocWithSlugs = sluggifyTocEntries(toc);
40
- const newTree = valueToEstree(tocWithSlugs);
41
- if (newTree.type === "ArrayExpression") {
42
- esNode.init = newTree;
43
- }
44
- return EXIT;
45
- }
46
- return;
47
- });
48
- }
49
- });
50
- };
51
- };
52
- var index_default = remarkMdxTocWithSlugs;
53
- export {
54
- index_default as default
28
+ const mdxTocTransformer = remarkMdxToc.call(this, options);
29
+ const name = options.name ?? "toc";
30
+ return function mdxTocWithSlugsTransformer(ast, ...args) {
31
+ const result = mdxTocTransformer(ast, ...args);
32
+ if (result instanceof Promise) throw new Error(`Wasn't expected remark-mdx-toc to be an async plugin`);
33
+ const mdast = ast;
34
+ visit$1(mdast, ["mdxjsEsm"], (mdxNode) => {
35
+ assertMdxjsEsmNode(mdxNode);
36
+ const estree = mdxNode.data?.estree;
37
+ if (estree) visit(estree, (esNode) => {
38
+ if (esNode.type === "VariableDeclarator" && esNode.id.type === "Identifier" && esNode.id.name === name && esNode.init) {
39
+ const tocExportString = generate(esNode.init);
40
+ const toc = JSON.parse(tocExportString);
41
+ const tocWithSlugs = sluggifyTocEntries(toc);
42
+ const newTree = valueToEstree(tocWithSlugs);
43
+ if (newTree.type === "ArrayExpression") esNode.init = newTree;
44
+ return EXIT;
45
+ }
46
+ return;
47
+ });
48
+ });
49
+ };
55
50
  };
51
+ var src_default = remarkMdxTocWithSlugs;
52
+
53
+ //#endregion
54
+ export { src_default as default };
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["entries: TocEntry[]","entry: TocEntry","headingSlugger: GithubSlugger","node: Node","remarkMdxTocWithSlugs: Plugin<[RemarkMdxTocWithSlugsOptions?]>"],"sources":["../src/index.ts"],"sourcesContent":["import { generate } from \"astring\";\nimport { valueToEstree } from \"estree-util-value-to-estree\";\nimport { EXIT, visit as estreeVisit } from \"estree-util-visit\";\nimport GithubSlugger from \"github-slugger\";\nimport remarkMdxToc from \"@altano/remark-mdx-toc\";\nimport { visit } from \"unist-util-visit\";\n\nimport type { RemarkMdxTocOptions, TocEntry } from \"@altano/remark-mdx-toc\";\nimport type { Plugin, Processor } from \"unified\";\nimport type { MdxjsEsm } from \"mdast-util-mdxjs-esm\";\nimport type { Node } from \"unist\";\n\nexport type TableOfContentsEntry = TocEntry & {\n slug: string;\n children: TableOfContentsEntry[];\n};\n\nfunction sluggifyTocEntries(\n entries: TocEntry[],\n headingSlugger = new GithubSlugger(),\n): TableOfContentsEntry[] {\n return entries.map((entry) => sluggifyTocEntry(entry, headingSlugger));\n}\n\nfunction sluggifyTocEntry(\n entry: TocEntry,\n headingSlugger: GithubSlugger,\n): TableOfContentsEntry {\n return {\n ...entry,\n slug: headingSlugger.slug(entry.value),\n children: sluggifyTocEntries(entry.children, headingSlugger),\n };\n}\n\nexport type RemarkMdxTocWithSlugsOptions = RemarkMdxTocOptions;\n\nfunction assertMdxjsEsmNode(node: Node): asserts node is MdxjsEsm {\n if (node.type !== \"mdxjsEsm\") {\n throw new Error(`Node was unexpected type: ${node.type}`);\n }\n}\n\n/**\n * Remark plugin that, given a tree that has had remark-mdx-toc run over it\n * already, the toc data will be enhanced to have auto-generated slugs for every\n * heading. This uses github-slugger\n */\nconst remarkMdxTocWithSlugs: Plugin<[RemarkMdxTocWithSlugsOptions?]> =\n function (this: Processor, options = {}) {\n const mdxTocTransformer = remarkMdxToc.call(this, options);\n\n const name = options.name ?? \"toc\"; // mirrors remark-mdx-toc\n\n return function mdxTocWithSlugsTransformer(ast, ...args): void {\n // Delegate to remark-mdx-toc to create the table of contents\n const result = mdxTocTransformer(ast, ...args);\n if (result instanceof Promise) {\n throw new Error(`Wasn't expected remark-mdx-toc to be an async plugin`);\n }\n\n const mdast = ast;\n\n // visit all esm nodes in the mdx\n visit(mdast, [\"mdxjsEsm\"], (mdxNode) => {\n assertMdxjsEsmNode(mdxNode);\n // visit all nodes in the estree\n const estree = mdxNode.data?.estree;\n if (estree) {\n estreeVisit(estree, (esNode) => {\n if (\n esNode.type === \"VariableDeclarator\" &&\n esNode.id.type === \"Identifier\" &&\n esNode.id.name === name &&\n esNode.init\n ) {\n // we found the \"toc\" variable declarator\n\n // It's easier to be wasteful and do our transformations in JS,\n // instead of directly on the tree, and then convert it back to a\n // tree.\n const tocExportString = generate(esNode.init);\n const toc = JSON.parse(tocExportString) as TocEntry[];\n\n // Add slugs to the toc\n const tocWithSlugs = sluggifyTocEntries(toc);\n\n // Overwrite the existing toc export with ours\n const newTree = valueToEstree(tocWithSlugs);\n\n if (newTree.type === \"ArrayExpression\") {\n esNode.init = newTree;\n }\n\n // We out\n return EXIT;\n }\n\n return;\n });\n }\n });\n };\n };\n\nexport default remarkMdxTocWithSlugs;\n"],"mappings":";;;;;;;;AAiBA,SAAS,mBACPA,SACA,iBAAiB,IAAI,iBACG;AACxB,QAAO,QAAQ,IAAI,CAAC,UAAU,iBAAiB,OAAO,eAAe,CAAC;AACvE;AAED,SAAS,iBACPC,OACAC,gBACsB;AACtB,QAAO;EACL,GAAG;EACH,MAAM,eAAe,KAAK,MAAM,MAAM;EACtC,UAAU,mBAAmB,MAAM,UAAU,eAAe;CAC7D;AACF;AAID,SAAS,mBAAmBC,MAAsC;AAChE,KAAI,KAAK,SAAS,WAChB,OAAM,IAAI,OAAO,4BAA4B,KAAK,KAAK;AAE1D;;;;;;AAOD,MAAMC,wBACJ,SAA2B,UAAU,CAAE,GAAE;CACvC,MAAM,oBAAoB,aAAa,KAAK,MAAM,QAAQ;CAE1D,MAAM,OAAO,QAAQ,QAAQ;AAE7B,QAAO,SAAS,2BAA2B,KAAK,GAAG,MAAY;EAE7D,MAAM,SAAS,kBAAkB,KAAK,GAAG,KAAK;AAC9C,MAAI,kBAAkB,QACpB,OAAM,IAAI,OAAO;EAGnB,MAAM,QAAQ;AAGd,UAAM,OAAO,CAAC,UAAW,GAAE,CAAC,YAAY;AACtC,sBAAmB,QAAQ;GAE3B,MAAM,SAAS,QAAQ,MAAM;AAC7B,OAAI,OACF,OAAY,QAAQ,CAAC,WAAW;AAC9B,QACE,OAAO,SAAS,wBAChB,OAAO,GAAG,SAAS,gBACnB,OAAO,GAAG,SAAS,QACnB,OAAO,MACP;KAMA,MAAM,kBAAkB,SAAS,OAAO,KAAK;KAC7C,MAAM,MAAM,KAAK,MAAM,gBAAgB;KAGvC,MAAM,eAAe,mBAAmB,IAAI;KAG5C,MAAM,UAAU,cAAc,aAAa;AAE3C,SAAI,QAAQ,SAAS,kBACnB,QAAO,OAAO;AAIhB,YAAO;IACR;AAED;GACD,EAAC;EAEL,EAAC;CACH;AACF;AAEH,kBAAe"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@altano/remark-mdx-toc-with-slugs",
3
- "version": "3.0.2",
3
+ "version": "4.0.1",
4
4
  "description": "A remark plugin to generate a table of contents (including slugs) and convert it into MDX export",
5
5
  "keywords": [
6
6
  "mdx",
@@ -27,6 +27,7 @@
27
27
  "types": "./dist/index.d.ts",
28
28
  "files": [
29
29
  "dist/**/*.js",
30
+ "dist/**/*.js.map",
30
31
  "dist/**/*.d.ts"
31
32
  ],
32
33
  "dependencies": {
@@ -37,29 +38,29 @@
37
38
  "mdast-util-mdxjs-esm": "^2.0.1",
38
39
  "unified": "^11.0.5",
39
40
  "unist-util-visit": "^5.0.0",
40
- "@altano/remark-mdx-toc": "0.0.3"
41
+ "@altano/remark-mdx-toc": "1.0.1"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@arethetypeswrong/cli": "^0.17.4",
44
45
  "@types/node": "^22.13.10",
45
46
  "@types/unist": "^3.0.3",
46
- "@vitest/coverage-v8": "^3.1.1",
47
+ "@vitest/coverage-v8": "^3.1.4",
47
48
  "depcheck": "^1.4.7",
48
49
  "prettier": "^3.5.3",
50
+ "tsdown": "^0.12.9",
49
51
  "typescript": "^5.8.2",
50
- "vite": "^6.2.5",
51
- "vitest": "^3.1.1",
52
- "@altano/testing": "0.0.0",
53
- "@altano/remark-plugin-test-util": "0.0.0",
54
- "@altano/build-config": "0.0.0",
55
- "@altano/tsconfig": "0.0.0"
52
+ "vite": "^6.2.6",
53
+ "vitest": "^3.1.4",
54
+ "@altano/build-config": "0.0.1",
55
+ "@altano/remark-plugin-test-util": "0.0.1",
56
+ "@altano/testing": "0.0.1",
57
+ "@altano/tsconfig": "0.0.1"
56
58
  },
57
59
  "publishConfig": {
58
60
  "access": "public"
59
61
  },
60
62
  "scripts": {
61
- "build": "tsup --config build-config/tsup.config.node.ts",
62
- "build:types": "tsc --project tsconfig.declarations.json",
63
+ "build": "tsdown --config ../build-config/tsdown.config.browser.ts",
63
64
  "check:exports": "attw --pack . --profile esm-only --quiet",
64
65
  "check:types:src": "tsc --noEmit",
65
66
  "check:types:test": "tsc --noEmit --project ./tests/tsconfig.json",