nuartz 0.1.4 → 0.1.6
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/__tests__/backlinks.test.js +48 -50
- package/dist/__tests__/backlinks.test.js.map +1 -1
- package/dist/__tests__/fs.test.js +100 -105
- package/dist/__tests__/fs.test.js.map +1 -1
- package/dist/__tests__/markdown.test.js +61 -63
- package/dist/__tests__/markdown.test.js.map +1 -1
- package/dist/__tests__/search.test.js +52 -54
- package/dist/__tests__/search.test.js.map +1 -1
- package/dist/backlinks.js +2 -6
- package/dist/backlinks.js.map +1 -1
- package/dist/config.js +1 -4
- package/dist/config.js.map +1 -1
- package/dist/fs.js +16 -24
- package/dist/fs.js.map +1 -1
- package/dist/index.js +11 -28
- package/dist/index.js.map +1 -1
- package/dist/markdown.js +44 -50
- package/dist/markdown.js.map +1 -1
- package/dist/plugins/arrows.js +3 -7
- package/dist/plugins/arrows.js.map +1 -1
- package/dist/plugins/callout.js +3 -7
- package/dist/plugins/callout.js.map +1 -1
- package/dist/plugins/callout.test.js +39 -44
- package/dist/plugins/callout.test.js.map +1 -1
- package/dist/plugins/comment.js +3 -7
- package/dist/plugins/comment.js.map +1 -1
- package/dist/plugins/comment.test.js +32 -37
- package/dist/plugins/comment.test.js.map +1 -1
- package/dist/plugins/highlight.js +3 -7
- package/dist/plugins/highlight.js.map +1 -1
- package/dist/plugins/highlight.test.js +28 -33
- package/dist/plugins/highlight.test.js.map +1 -1
- package/dist/plugins/tag.js +3 -7
- package/dist/plugins/tag.js.map +1 -1
- package/dist/plugins/tag.test.js +42 -47
- package/dist/plugins/tag.test.js.map +1 -1
- package/dist/plugins/wikilink.js +3 -7
- package/dist/plugins/wikilink.js.map +1 -1
- package/dist/plugins/wikilink.test.js +54 -59
- package/dist/plugins/wikilink.test.js.map +1 -1
- package/dist/search.js +1 -4
- package/dist/search.js.map +1 -1
- package/dist/types.js +1 -2
- package/package.json +26 -6
- package/styles/prose.css +254 -0
|
@@ -1,51 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const unified_1 = require("unified");
|
|
8
|
-
const remark_parse_1 = __importDefault(require("remark-parse"));
|
|
9
|
-
const remark_rehype_1 = __importDefault(require("remark-rehype"));
|
|
10
|
-
const rehype_stringify_1 = __importDefault(require("rehype-stringify"));
|
|
11
|
-
const highlight_js_1 = require("./highlight.js");
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { unified } from "unified";
|
|
3
|
+
import remarkParse from "remark-parse";
|
|
4
|
+
import remarkRehype from "remark-rehype";
|
|
5
|
+
import rehypeStringify from "rehype-stringify";
|
|
6
|
+
import { remarkHighlight } from "./highlight.js";
|
|
12
7
|
async function process(md) {
|
|
13
|
-
const result = await
|
|
14
|
-
.use(
|
|
15
|
-
.use(
|
|
16
|
-
.use(
|
|
17
|
-
.use(
|
|
8
|
+
const result = await unified()
|
|
9
|
+
.use(remarkParse)
|
|
10
|
+
.use(remarkHighlight)
|
|
11
|
+
.use(remarkRehype, { allowDangerousHtml: true })
|
|
12
|
+
.use(rehypeStringify, { allowDangerousHtml: true })
|
|
18
13
|
.process(md);
|
|
19
14
|
return String(result);
|
|
20
15
|
}
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
describe("remarkHighlight", () => {
|
|
17
|
+
it("wraps ==text== in <mark> tags", async () => {
|
|
23
18
|
const html = await process("This is ==highlighted== text");
|
|
24
|
-
|
|
19
|
+
expect(html).toContain("<mark>highlighted</mark>");
|
|
25
20
|
});
|
|
26
|
-
|
|
21
|
+
it("handles multiple highlights in one line", async () => {
|
|
27
22
|
const html = await process("==first== and ==second==");
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
expect(html).toContain("<mark>first</mark>");
|
|
24
|
+
expect(html).toContain("<mark>second</mark>");
|
|
30
25
|
});
|
|
31
|
-
|
|
26
|
+
it("preserves surrounding text", async () => {
|
|
32
27
|
const html = await process("before ==middle== after");
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
expect(html).toContain("before ");
|
|
29
|
+
expect(html).toContain("<mark>middle</mark>");
|
|
30
|
+
expect(html).toContain(" after");
|
|
36
31
|
});
|
|
37
|
-
|
|
32
|
+
it("does not match single = signs", async () => {
|
|
38
33
|
const html = await process("a = b");
|
|
39
|
-
|
|
34
|
+
expect(html).not.toContain("<mark>");
|
|
40
35
|
});
|
|
41
|
-
|
|
36
|
+
it("does not match across newlines", async () => {
|
|
42
37
|
const html = await process("==start\nend==");
|
|
43
|
-
|
|
38
|
+
expect(html).not.toContain("<mark>");
|
|
44
39
|
});
|
|
45
|
-
|
|
40
|
+
it("leaves text without highlights unchanged", async () => {
|
|
46
41
|
const html = await process("No highlights here");
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
expect(html).not.toContain("<mark>");
|
|
43
|
+
expect(html).toContain("No highlights here");
|
|
49
44
|
});
|
|
50
45
|
});
|
|
51
46
|
//# sourceMappingURL=highlight.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.test.js","sourceRoot":"","sources":["../../src/plugins/highlight.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"highlight.test.js","sourceRoot":"","sources":["../../src/plugins/highlight.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,WAAW,MAAM,cAAc,CAAA;AACtC,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,eAAe,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,KAAK,UAAU,OAAO,CAAC,EAAU;IAC/B,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE;SAC3B,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,eAAe,CAAC;SACpB,GAAG,CAAC,YAAY,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;SAC/C,GAAG,CAAC,eAAe,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;SAClD,OAAO,CAAC,EAAE,CAAC,CAAA;IACd,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,8BAA8B,CAAC,CAAA;QAC1D,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,0BAA0B,CAAC,CAAA;QACtD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,yBAAyB,CAAC,CAAA;QACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/plugins/tag.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.remarkTag = void 0;
|
|
4
|
-
const unist_util_visit_1 = require("unist-util-visit");
|
|
1
|
+
import { visit } from "unist-util-visit";
|
|
5
2
|
// #tag — must start with letter, can contain letters, digits, -, _
|
|
6
3
|
const TAG_REGEX = /#([a-zA-Z][a-zA-Z0-9_-]*)/g;
|
|
7
4
|
/**
|
|
8
5
|
* Transforms inline #tags into links.
|
|
9
6
|
* Collected tags are stored on the vfile data: `file.data.tags`
|
|
10
7
|
*/
|
|
11
|
-
const remarkTag = () => {
|
|
8
|
+
export const remarkTag = () => {
|
|
12
9
|
return (tree, file) => {
|
|
13
10
|
const collected = [];
|
|
14
|
-
|
|
11
|
+
visit(tree, "text", (node, index, parent) => {
|
|
15
12
|
if (!parent || index === undefined)
|
|
16
13
|
return;
|
|
17
14
|
const matches = [...node.value.matchAll(TAG_REGEX)];
|
|
@@ -43,5 +40,4 @@ const remarkTag = () => {
|
|
|
43
40
|
file.data.tags = [...new Set([...existing, ...collected])];
|
|
44
41
|
};
|
|
45
42
|
};
|
|
46
|
-
exports.remarkTag = remarkTag;
|
|
47
43
|
//# sourceMappingURL=tag.js.map
|
package/dist/plugins/tag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/plugins/tag.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/plugins/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAIxC,mEAAmE;AACnE,MAAM,SAAS,GAAG,4BAA4B,CAAA;AAM9C;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAqB,GAAG,EAAE;IAC9C,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACpB,MAAM,SAAS,GAAa,EAAE,CAAA;QAE9B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAChD,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAM;YAE1C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;YACnD,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAM;YAE3B,MAAM,KAAK,GAAsB,EAAE,CAAA;YACnC,IAAI,SAAS,GAAG,CAAC,CAAA;YAEjB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAA;gBACzB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAM,CAAA;gBAE/B,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;oBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;gBAC9E,CAAC;gBAED,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACnB,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,SAAS,GAAG,EAAE;oBACnB,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE;oBAC5D,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;iBAC/C,CAAC,CAAA;gBAEF,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;YACtC,CAAC;YAED,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YAClE,CAAC;YAED,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAI,IAAI,CAAC,IAAI,CAAC,IAA6B,IAAI,EAAE,CAAA;QAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;IAC5D,CAAC,CAAA;AACH,CAAC,CAAA"}
|
package/dist/plugins/tag.test.js
CHANGED
|
@@ -1,75 +1,70 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const unified_1 = require("unified");
|
|
8
|
-
const remark_parse_1 = __importDefault(require("remark-parse"));
|
|
9
|
-
const remark_rehype_1 = __importDefault(require("remark-rehype"));
|
|
10
|
-
const rehype_stringify_1 = __importDefault(require("rehype-stringify"));
|
|
11
|
-
const tag_js_1 = require("./tag.js");
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { unified } from "unified";
|
|
3
|
+
import remarkParse from "remark-parse";
|
|
4
|
+
import remarkRehype from "remark-rehype";
|
|
5
|
+
import rehypeStringify from "rehype-stringify";
|
|
6
|
+
import { remarkTag } from "./tag.js";
|
|
12
7
|
async function process(md) {
|
|
13
|
-
const result = await
|
|
14
|
-
.use(
|
|
15
|
-
.use(
|
|
16
|
-
.use(
|
|
17
|
-
.use(
|
|
8
|
+
const result = await unified()
|
|
9
|
+
.use(remarkParse)
|
|
10
|
+
.use(remarkTag)
|
|
11
|
+
.use(remarkRehype)
|
|
12
|
+
.use(rehypeStringify)
|
|
18
13
|
.process(md);
|
|
19
14
|
return String(result);
|
|
20
15
|
}
|
|
21
16
|
async function processWithData(md) {
|
|
22
|
-
const file = await
|
|
23
|
-
.use(
|
|
24
|
-
.use(
|
|
25
|
-
.use(
|
|
26
|
-
.use(
|
|
17
|
+
const file = await unified()
|
|
18
|
+
.use(remarkParse)
|
|
19
|
+
.use(remarkTag)
|
|
20
|
+
.use(remarkRehype)
|
|
21
|
+
.use(rehypeStringify)
|
|
27
22
|
.process(md);
|
|
28
23
|
return { html: String(file), tags: file.data.tags ?? [] };
|
|
29
24
|
}
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
describe("remarkTag", () => {
|
|
26
|
+
it("transforms #mytag into a tag link", async () => {
|
|
32
27
|
const html = await process("Hello #mytag world");
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
expect(html).toContain('href="/tags/mytag"');
|
|
29
|
+
expect(html).toContain('class="tag"');
|
|
30
|
+
expect(html).toContain("#mytag");
|
|
36
31
|
});
|
|
37
|
-
|
|
32
|
+
it("does not transform #123invalid (starts with number)", async () => {
|
|
38
33
|
const html = await process("Hello #123invalid world");
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
expect(html).not.toContain('class="tag"');
|
|
35
|
+
expect(html).toContain("#123invalid");
|
|
41
36
|
});
|
|
42
|
-
|
|
37
|
+
it("transforms #tag-with-hyphen", async () => {
|
|
43
38
|
const html = await process("A #tag-with-hyphen here");
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
expect(html).toContain('href="/tags/tag-with-hyphen"');
|
|
40
|
+
expect(html).toContain('class="tag"');
|
|
46
41
|
});
|
|
47
|
-
|
|
42
|
+
it("transforms #tag_with_underscore", async () => {
|
|
48
43
|
const html = await process("A #tag_with_underscore here");
|
|
49
|
-
|
|
44
|
+
expect(html).toContain('href="/tags/tag_with_underscore"');
|
|
50
45
|
});
|
|
51
|
-
|
|
46
|
+
it("handles multiple tags in one paragraph", async () => {
|
|
52
47
|
const html = await process("Tags: #first and #second");
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
expect(html).toContain('href="/tags/first"');
|
|
49
|
+
expect(html).toContain('href="/tags/second"');
|
|
55
50
|
});
|
|
56
|
-
|
|
51
|
+
it("collects tags into file.data.tags", async () => {
|
|
57
52
|
const { tags } = await processWithData("Hello #alpha and #beta");
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
expect(tags).toContain("alpha");
|
|
54
|
+
expect(tags).toContain("beta");
|
|
60
55
|
});
|
|
61
|
-
|
|
56
|
+
it("deduplicates collected tags", async () => {
|
|
62
57
|
const { tags } = await processWithData("#same #same #same");
|
|
63
|
-
|
|
58
|
+
expect(tags).toEqual(["same"]);
|
|
64
59
|
});
|
|
65
|
-
|
|
60
|
+
it("preserves surrounding text", async () => {
|
|
66
61
|
const html = await process("before #tag after");
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
expect(html).toContain("before ");
|
|
63
|
+
expect(html).toContain(" after");
|
|
69
64
|
});
|
|
70
|
-
|
|
65
|
+
it("sets data-tag attribute", async () => {
|
|
71
66
|
const html = await process("#example");
|
|
72
|
-
|
|
67
|
+
expect(html).toContain('data-tag="example"');
|
|
73
68
|
});
|
|
74
69
|
});
|
|
75
70
|
//# sourceMappingURL=tag.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.test.js","sourceRoot":"","sources":["../../src/plugins/tag.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tag.test.js","sourceRoot":"","sources":["../../src/plugins/tag.test.ts"],"names":[],"mappings":"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"}
|
package/dist/plugins/wikilink.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.remarkWikilink = void 0;
|
|
4
|
-
const unist_util_visit_1 = require("unist-util-visit");
|
|
1
|
+
import { visit } from "unist-util-visit";
|
|
5
2
|
/**
|
|
6
3
|
* Matches:
|
|
7
4
|
* [[target]] → link to target, display "target"
|
|
@@ -11,7 +8,7 @@ const unist_util_visit_1 = require("unist-util-visit");
|
|
|
11
8
|
* ![[image.png]] → embed (image or transclusion)
|
|
12
9
|
*/
|
|
13
10
|
const WIKILINK_REGEX = /(!?)\[\[([^\[\]|#]+?)(?:#([^\[\]|]+?))?(?:\|([^\[\]]+?))?\]\]/g;
|
|
14
|
-
const remarkWikilink = (options = {}) => {
|
|
11
|
+
export const remarkWikilink = (options = {}) => {
|
|
15
12
|
const { baseUrl = "/", resolve, knownSlugs } = options;
|
|
16
13
|
const defaultResolve = (target, heading) => {
|
|
17
14
|
const slug = target
|
|
@@ -26,7 +23,7 @@ const remarkWikilink = (options = {}) => {
|
|
|
26
23
|
: defaultResolve;
|
|
27
24
|
return (tree, file) => {
|
|
28
25
|
const outgoingLinks = [];
|
|
29
|
-
|
|
26
|
+
visit(tree, "text", (node, index, parent) => {
|
|
30
27
|
if (!parent || index === undefined)
|
|
31
28
|
return;
|
|
32
29
|
const matches = [...node.value.matchAll(WIKILINK_REGEX)];
|
|
@@ -81,5 +78,4 @@ const remarkWikilink = (options = {}) => {
|
|
|
81
78
|
file.data.links = [...new Set([...existing, ...outgoingLinks])];
|
|
82
79
|
};
|
|
83
80
|
};
|
|
84
|
-
exports.remarkWikilink = remarkWikilink;
|
|
85
81
|
//# sourceMappingURL=wikilink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wikilink.js","sourceRoot":"","sources":["../../src/plugins/wikilink.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wikilink.js","sourceRoot":"","sources":["../../src/plugins/wikilink.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,99 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const unified_1 = require("unified");
|
|
8
|
-
const remark_parse_1 = __importDefault(require("remark-parse"));
|
|
9
|
-
const remark_rehype_1 = __importDefault(require("remark-rehype"));
|
|
10
|
-
const rehype_stringify_1 = __importDefault(require("rehype-stringify"));
|
|
11
|
-
const wikilink_js_1 = require("./wikilink.js");
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { unified } from "unified";
|
|
3
|
+
import remarkParse from "remark-parse";
|
|
4
|
+
import remarkRehype from "remark-rehype";
|
|
5
|
+
import rehypeStringify from "rehype-stringify";
|
|
6
|
+
import { remarkWikilink } from "./wikilink.js";
|
|
12
7
|
async function process(md, options) {
|
|
13
|
-
const result = await
|
|
14
|
-
.use(
|
|
15
|
-
.use(
|
|
16
|
-
.use(
|
|
17
|
-
.use(
|
|
8
|
+
const result = await unified()
|
|
9
|
+
.use(remarkParse)
|
|
10
|
+
.use(remarkWikilink, options)
|
|
11
|
+
.use(remarkRehype)
|
|
12
|
+
.use(rehypeStringify)
|
|
18
13
|
.process(md);
|
|
19
14
|
return String(result);
|
|
20
15
|
}
|
|
21
16
|
async function processWithData(md, options) {
|
|
22
|
-
const file = await
|
|
23
|
-
.use(
|
|
24
|
-
.use(
|
|
25
|
-
.use(
|
|
26
|
-
.use(
|
|
17
|
+
const file = await unified()
|
|
18
|
+
.use(remarkParse)
|
|
19
|
+
.use(remarkWikilink, options)
|
|
20
|
+
.use(remarkRehype)
|
|
21
|
+
.use(rehypeStringify)
|
|
27
22
|
.process(md);
|
|
28
23
|
return { html: String(file), links: file.data.links ?? [] };
|
|
29
24
|
}
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
describe("remarkWikilink", () => {
|
|
26
|
+
it("transforms [[Page Name]] into a wikilink", async () => {
|
|
32
27
|
const html = await process("Visit [[Page Name]] for details");
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
expect(html).toContain('href="/page-name"');
|
|
29
|
+
expect(html).toContain('class="wikilink"');
|
|
30
|
+
expect(html).toContain("Page Name");
|
|
36
31
|
});
|
|
37
|
-
|
|
32
|
+
it("handles alias [[Page|Alias]]", async () => {
|
|
38
33
|
const html = await process("See [[Page|Custom Display]]");
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
expect(html).toContain('href="/page"');
|
|
35
|
+
expect(html).toContain("Custom Display");
|
|
41
36
|
});
|
|
42
|
-
|
|
37
|
+
it("handles heading [[Page#Heading]]", async () => {
|
|
43
38
|
const html = await process("Go to [[Page#My Section]]");
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
expect(html).toContain('href="/page#my-section"');
|
|
40
|
+
expect(html).toContain("Page > My Section");
|
|
46
41
|
});
|
|
47
|
-
|
|
42
|
+
it("handles heading with alias [[Page#Heading|Alias]]", async () => {
|
|
48
43
|
const html = await process("See [[Page#Section|Link Text]]");
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
expect(html).toContain('href="/page#section"');
|
|
45
|
+
expect(html).toContain("Link Text");
|
|
51
46
|
});
|
|
52
|
-
|
|
47
|
+
it("transforms ![[image.png]] into an embed image", async () => {
|
|
53
48
|
const html = await process("Here: ![[image.png]]");
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
expect(html).toContain("<img");
|
|
50
|
+
expect(html).toContain('src="/api/content/image.png"');
|
|
51
|
+
expect(html).toContain('class="embed-image"');
|
|
57
52
|
});
|
|
58
|
-
|
|
53
|
+
it("converts spaces to hyphens in href", async () => {
|
|
59
54
|
const html = await process("[[My Long Page Name]]");
|
|
60
|
-
|
|
55
|
+
expect(html).toContain('href="/my-long-page-name"');
|
|
61
56
|
});
|
|
62
|
-
|
|
57
|
+
it("accumulates links in file.data.links", async () => {
|
|
63
58
|
const { links } = await processWithData("[[Page A]] and [[Page B]]");
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
expect(links).toContain("Page A");
|
|
60
|
+
expect(links).toContain("Page B");
|
|
66
61
|
});
|
|
67
|
-
|
|
62
|
+
it("deduplicates collected links", async () => {
|
|
68
63
|
const { links } = await processWithData("[[Same]] and [[Same]]");
|
|
69
|
-
|
|
64
|
+
expect(links).toEqual(["Same"]);
|
|
70
65
|
});
|
|
71
|
-
|
|
66
|
+
it("does not add embeds to outgoing links", async () => {
|
|
72
67
|
const { links } = await processWithData("![[image.png]]");
|
|
73
|
-
|
|
68
|
+
expect(links).toEqual([]);
|
|
74
69
|
});
|
|
75
|
-
|
|
70
|
+
it("supports custom resolve function", async () => {
|
|
76
71
|
const html = await process("[[My Page]]", {
|
|
77
72
|
resolve: (target) => `/custom/${target.toLowerCase().replace(/\s+/g, "_")}`,
|
|
78
73
|
});
|
|
79
|
-
|
|
74
|
+
expect(html).toContain('href="/custom/my_page"');
|
|
80
75
|
});
|
|
81
|
-
|
|
76
|
+
it("supports custom baseUrl", async () => {
|
|
82
77
|
const html = await process("[[Page]]", { baseUrl: "/wiki/" });
|
|
83
|
-
|
|
78
|
+
expect(html).toContain('href="/wiki/page"');
|
|
84
79
|
});
|
|
85
|
-
|
|
80
|
+
it("sets data-target attribute", async () => {
|
|
86
81
|
const html = await process("[[My Page]]");
|
|
87
|
-
|
|
82
|
+
expect(html).toContain('data-target="My Page"');
|
|
88
83
|
});
|
|
89
|
-
|
|
84
|
+
it("sets data-heading attribute when heading present", async () => {
|
|
90
85
|
const html = await process("[[Page#Section]]");
|
|
91
|
-
|
|
86
|
+
expect(html).toContain('data-heading="Section"');
|
|
92
87
|
});
|
|
93
|
-
|
|
88
|
+
it("preserves surrounding text", async () => {
|
|
94
89
|
const html = await process("before [[Link]] after");
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
expect(html).toContain("before ");
|
|
91
|
+
expect(html).toContain(" after");
|
|
97
92
|
});
|
|
98
93
|
});
|
|
99
94
|
//# sourceMappingURL=wikilink.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wikilink.test.js","sourceRoot":"","sources":["../../src/plugins/wikilink.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wikilink.test.js","sourceRoot":"","sources":["../../src/plugins/wikilink.test.ts"],"names":[],"mappings":"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"}
|
package/dist/search.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildSearchIndex = buildSearchIndex;
|
|
4
1
|
/**
|
|
5
2
|
* Builds a flat search index from a list of MarkdownFile entries.
|
|
6
3
|
* Strip HTML and frontmatter for plain-text indexing.
|
|
7
4
|
*/
|
|
8
|
-
function buildSearchIndex(files) {
|
|
5
|
+
export function buildSearchIndex(files) {
|
|
9
6
|
return files
|
|
10
7
|
.filter((f) => !f.frontmatter.draft)
|
|
11
8
|
.map((file) => {
|
package/dist/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAqB;IACpD,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;SACnC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,0BAA0B;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;QACvD,qCAAqC;QACrC,MAAM,IAAI,GAAG,IAAI;aACd,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAG,cAAc;aAC/C,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAU,cAAc;aAC/C,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAE,SAAS;aAC1C,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC,eAAe;aACvD,OAAO,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC,mBAAmB;aACvE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAS,WAAW;aAC5C,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAY,WAAW;aAC5C,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAc,cAAc;aAC/C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE,CAAA;QAET,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI;YACxE,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW;SAC1C,CAAA;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
|
package/dist/types.js
CHANGED
package/package.json
CHANGED
|
@@ -1,23 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuartz",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Obsidian
|
|
3
|
+
"version": "0.1.6",
|
|
4
|
+
"description": "Publish your Obsidian vault as a Next.js website — wikilinks, backlinks, graph view, search",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/syshin0116/nuartz.git"
|
|
9
9
|
},
|
|
10
|
-
"keywords": [
|
|
10
|
+
"keywords": [
|
|
11
|
+
"markdown",
|
|
12
|
+
"obsidian",
|
|
13
|
+
"nextjs",
|
|
14
|
+
"blog",
|
|
15
|
+
"mdx",
|
|
16
|
+
"remark",
|
|
17
|
+
"rehype",
|
|
18
|
+
"digital-garden",
|
|
19
|
+
"wikilink",
|
|
20
|
+
"obsidian-publish",
|
|
21
|
+
"quartz",
|
|
22
|
+
"tailwindcss",
|
|
23
|
+
"shadcn",
|
|
24
|
+
"knowledge-base",
|
|
25
|
+
"second-brain"
|
|
26
|
+
],
|
|
11
27
|
"homepage": "https://github.com/syshin0116/nuartz#readme",
|
|
28
|
+
"type": "module",
|
|
12
29
|
"main": "./dist/index.js",
|
|
13
30
|
"types": "./dist/index.d.ts",
|
|
14
|
-
"files": [
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"styles"
|
|
34
|
+
],
|
|
15
35
|
"exports": {
|
|
16
36
|
".": {
|
|
17
37
|
"types": "./dist/index.d.ts",
|
|
18
|
-
"files": ["dist"],
|
|
19
38
|
"default": "./dist/index.js"
|
|
20
|
-
}
|
|
39
|
+
},
|
|
40
|
+
"./styles.css": "./styles/prose.css"
|
|
21
41
|
},
|
|
22
42
|
"scripts": {
|
|
23
43
|
"build": "tsc",
|