obsidian-mcp-server 3.5.3 → 3.5.5
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/AGENTS.md +47 -6
- package/CLAUDE.md +47 -6
- package/Dockerfile +3 -2
- package/README.md +144 -100
- package/changelog/3.5.x/3.5.3.md +4 -3
- package/changelog/3.5.x/3.5.4.md +42 -0
- package/changelog/3.5.x/3.5.5.md +20 -0
- package/changelog/template.md +7 -7
- package/dist/config/server-config.d.ts +1 -1
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +9 -2
- package/dist/config/server-config.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js +19 -1
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/_shared/schemas.js +1 -1
- package/dist/mcp-server/tools/definitions/_shared/schemas.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +157 -65
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +13 -2
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +14 -3
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +9 -0
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +9 -0
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +9 -0
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +19 -26
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +3 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +3 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +13 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +19 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +17 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +22 -3
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +4 -0
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +13 -2
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +14 -3
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +10 -2
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +10 -2
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +12 -5
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +29 -24
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +12 -2
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +20 -10
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -1
- package/dist/services/obsidian/frontmatter-ops.d.ts +44 -11
- package/dist/services/obsidian/frontmatter-ops.d.ts.map +1 -1
- package/dist/services/obsidian/frontmatter-ops.js +370 -69
- package/dist/services/obsidian/frontmatter-ops.js.map +1 -1
- package/dist/services/obsidian/obsidian-service.d.ts +26 -5
- package/dist/services/obsidian/obsidian-service.d.ts.map +1 -1
- package/dist/services/obsidian/obsidian-service.js +469 -85
- package/dist/services/obsidian/obsidian-service.js.map +1 -1
- package/dist/services/obsidian/section-extractor.d.ts +33 -3
- package/dist/services/obsidian/section-extractor.d.ts.map +1 -1
- package/dist/services/obsidian/section-extractor.js +115 -75
- package/dist/services/obsidian/section-extractor.js.map +1 -1
- package/dist/services/obsidian/types.d.ts +11 -4
- package/dist/services/obsidian/types.d.ts.map +1 -1
- package/manifest.json +1 -1
- package/package.json +9 -9
- package/server.json +3 -3
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* tools when the upstream Local REST API has no single-call equivalent.
|
|
5
5
|
* @module services/obsidian/frontmatter-ops
|
|
6
6
|
*/
|
|
7
|
-
import { isMap, parseDocument } from 'yaml';
|
|
7
|
+
import { isMap, isScalar, isSeq, parseDocument, Scalar } from 'yaml';
|
|
8
8
|
/**
|
|
9
9
|
* The one frontmatter boundary: an opening `---` alone on the first line, YAML,
|
|
10
10
|
* then a `---` that starts its own line. The YAML span and the newline that
|
|
@@ -52,9 +52,13 @@ export function splice(content) {
|
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
54
|
* Describe why `yamlText` is not usable as a frontmatter block, or `undefined`
|
|
55
|
-
* when it is. Catches YAML that no longer parses
|
|
55
|
+
* when it is. Catches YAML that no longer parses, YAML that parses to
|
|
56
56
|
* something other than a mapping — the two states in which Obsidian reads no
|
|
57
|
-
* properties at all.
|
|
57
|
+
* properties at all — and YAML that parses but cannot be emitted again.
|
|
58
|
+
*
|
|
59
|
+
* That last one is its own class: an unresolved alias (`bad: *missing`) is
|
|
60
|
+
* accepted by `parseDocument` with an empty `doc.errors` and refused only by
|
|
61
|
+
* the emitter, so the round trip is what surfaces it.
|
|
58
62
|
*
|
|
59
63
|
* It cannot catch an edit that stays well-formed while meaning something else:
|
|
60
64
|
* a renamed key, a scalar that re-parses as a different type. Those are valid
|
|
@@ -68,7 +72,29 @@ export function frontmatterParseError(yamlText) {
|
|
|
68
72
|
if (doc.contents !== null && !isMap(doc.contents)) {
|
|
69
73
|
return 'Frontmatter must be a YAML mapping of properties.';
|
|
70
74
|
}
|
|
71
|
-
return;
|
|
75
|
+
return serializeError(doc);
|
|
76
|
+
}
|
|
77
|
+
/** The emitter's own complaint about `doc`, or `undefined` when it round-trips. */
|
|
78
|
+
function serializeError(doc) {
|
|
79
|
+
try {
|
|
80
|
+
doc.toString({ lineWidth: 0 });
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
return err instanceof Error ? err.message : String(err);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The line ending a rewritten block is emitted with. `doc.toString()` always
|
|
89
|
+
* emits LF and the fences used to be hard-coded to it, which left a CRLF note
|
|
90
|
+
* with an LF block above a CRLF body. An existing block keeps its own ending;
|
|
91
|
+
* a block being created on a note that had none follows the body's first line
|
|
92
|
+
* (issue #125).
|
|
93
|
+
*/
|
|
94
|
+
function blockEol(spliced) {
|
|
95
|
+
if (spliced.hasFrontmatter)
|
|
96
|
+
return spliced.open.endsWith('\r\n') ? '\r\n' : '\n';
|
|
97
|
+
return /\r\n|\n/.exec(spliced.body)?.[0] === '\r\n' ? '\r\n' : '\n';
|
|
72
98
|
}
|
|
73
99
|
/**
|
|
74
100
|
* Re-emit the parsed frontmatter document between `---` fences, preserving the
|
|
@@ -76,41 +102,71 @@ export function frontmatterParseError(yamlText) {
|
|
|
76
102
|
* these helpers parse with `yaml`'s CST-backed `parseDocument` and edit nodes in
|
|
77
103
|
* place rather than round-tripping the block through a plain object (which drops
|
|
78
104
|
* comments and rewrites untouched scalars, e.g. `date: 2026-06-29` → an ISO
|
|
79
|
-
* timestamp). When no keys remain, the whole block is dropped
|
|
80
|
-
*
|
|
105
|
+
* timestamp). When no keys remain, the whole block is dropped along with the
|
|
106
|
+
* whitespace-only lines that separated it from the body.
|
|
81
107
|
*
|
|
82
108
|
* The body is re-attached verbatim. `FM_RE` consumes the newline that closes
|
|
83
|
-
* the fence line and nothing more, so the
|
|
84
|
-
*
|
|
85
|
-
*
|
|
109
|
+
* the fence line and nothing more, so the trailing separator replaces exactly
|
|
110
|
+
* what was eaten — the blank line before the body (or its absence, or several
|
|
111
|
+
* of them) survives the rewrite byte for byte.
|
|
112
|
+
*
|
|
113
|
+
* Emitting can still fail after a mutation that parsed cleanly: deleting the
|
|
114
|
+
* key that owned an anchor leaves every alias to it dangling, and the emitter
|
|
115
|
+
* is the only thing that notices. That is a refusal, not a throw — the caller
|
|
116
|
+
* decides what to tell the user, and no write goes out either way.
|
|
86
117
|
*/
|
|
87
|
-
function serializeFrontmatter(doc,
|
|
118
|
+
function serializeFrontmatter(doc, spliced) {
|
|
88
119
|
const node = doc.contents;
|
|
89
120
|
if (!node || (isMap(node) && node.items.length === 0)) {
|
|
90
|
-
|
|
121
|
+
/**
|
|
122
|
+
* The block is gone, and only the whitespace-only lines that separated it
|
|
123
|
+
* from the body go with it. A blanket `^\s+` also ate the first content
|
|
124
|
+
* line's own indentation, which is what an indented code block is made of
|
|
125
|
+
* (issue #125).
|
|
126
|
+
*/
|
|
127
|
+
return { ok: true, content: spliced.body.replace(/^(?:[ \t]*\r?\n)+/, '') };
|
|
128
|
+
}
|
|
129
|
+
let yamlText;
|
|
130
|
+
try {
|
|
131
|
+
yamlText = doc.toString({ lineWidth: 0 }).trimEnd();
|
|
91
132
|
}
|
|
92
|
-
|
|
93
|
-
|
|
133
|
+
catch (err) {
|
|
134
|
+
return { ok: false, problem: err instanceof Error ? err.message : String(err) };
|
|
135
|
+
}
|
|
136
|
+
const eol = blockEol(spliced);
|
|
137
|
+
return {
|
|
138
|
+
ok: true,
|
|
139
|
+
content: `---${eol}${yamlText.split('\n').join(eol)}${eol}---${eol}${spliced.body}`,
|
|
140
|
+
};
|
|
94
141
|
}
|
|
95
142
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
143
|
+
* The full file content with `key` removed from the frontmatter. A file with
|
|
144
|
+
* no frontmatter, or one where the key isn't present, comes back unchanged.
|
|
145
|
+
*
|
|
146
|
+
* Refuses — rather than writing — when the existing block does not parse as a
|
|
147
|
+
* mapping or the mutation leaves YAML that cannot be emitted. Both were silent
|
|
148
|
+
* data loss before: a block the parser recovered into a single malformed key
|
|
149
|
+
* was "emptied" by deleting that key, taking every sibling property and the
|
|
150
|
+
* block itself with it (issue #123).
|
|
99
151
|
*/
|
|
100
152
|
export function deleteFrontmatterKey(content, key) {
|
|
101
|
-
const
|
|
102
|
-
if (!hasFrontmatter)
|
|
103
|
-
return content;
|
|
104
|
-
const
|
|
153
|
+
const spliced = splice(content);
|
|
154
|
+
if (!spliced.hasFrontmatter)
|
|
155
|
+
return { ok: true, content };
|
|
156
|
+
const problem = frontmatterParseError(spliced.yamlText);
|
|
157
|
+
if (problem)
|
|
158
|
+
return { ok: false, problem };
|
|
159
|
+
const doc = parseDocument(spliced.yamlText);
|
|
105
160
|
if (!doc.has(key))
|
|
106
|
-
return content;
|
|
161
|
+
return { ok: true, content };
|
|
107
162
|
doc.delete(key);
|
|
108
|
-
return serializeFrontmatter(doc,
|
|
163
|
+
return serializeFrontmatter(doc, spliced);
|
|
109
164
|
}
|
|
110
165
|
/**
|
|
111
166
|
* Add or remove tags across frontmatter (`tags:` array) and inline `#tag`
|
|
112
|
-
* syntax. Inline detection skips code spans, link spans,
|
|
113
|
-
*
|
|
167
|
+
* syntax. Inline detection skips code spans, link spans, HTML comments, math,
|
|
168
|
+
* and a `#` preceded by anything but whitespace, line start, or markup such
|
|
169
|
+
* as `**` or `<br>` — see `splitProtectedSegments` and `TAG_LEFT_BOUNDARY`.
|
|
114
170
|
*/
|
|
115
171
|
export function reconcileTags(content, tags, operation, location) {
|
|
116
172
|
const norm = (t) => t.replace(/^#+/, '').trim();
|
|
@@ -119,7 +175,16 @@ export function reconcileTags(content, tags, operation, location) {
|
|
|
119
175
|
const skipped = new Set();
|
|
120
176
|
let updated = content;
|
|
121
177
|
if (location === 'frontmatter' || location === 'both') {
|
|
122
|
-
|
|
178
|
+
const edit = mutateFrontmatterTags(updated, wanted, operation, applied, skipped);
|
|
179
|
+
/**
|
|
180
|
+
* A refusal ends the whole call, `both` included. The frontmatter half runs
|
|
181
|
+
* first precisely so that returning here leaves the note byte-identical —
|
|
182
|
+
* proceeding to the inline half would tag the body on the strength of a
|
|
183
|
+
* frontmatter edit that never happened (issue #124).
|
|
184
|
+
*/
|
|
185
|
+
if (!edit.ok)
|
|
186
|
+
return edit;
|
|
187
|
+
updated = edit.content;
|
|
123
188
|
}
|
|
124
189
|
if (location === 'inline' || location === 'both') {
|
|
125
190
|
updated = mutateInlineTags(updated, wanted, operation, applied, skipped);
|
|
@@ -129,46 +194,105 @@ export function reconcileTags(content, tags, operation, location) {
|
|
|
129
194
|
// it from skipped.
|
|
130
195
|
for (const t of applied)
|
|
131
196
|
skipped.delete(t);
|
|
132
|
-
return { content: updated, applied: [...applied], skipped: [...skipped] };
|
|
197
|
+
return { ok: true, content: updated, applied: [...applied], skipped: [...skipped] };
|
|
133
198
|
}
|
|
134
199
|
function mutateFrontmatterTags(content, tags, operation, applied, skipped) {
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
200
|
+
const spliced = splice(content);
|
|
201
|
+
if (spliced.hasFrontmatter) {
|
|
202
|
+
const problem = frontmatterParseError(spliced.yamlText);
|
|
203
|
+
if (problem)
|
|
204
|
+
return { ok: false, problem };
|
|
205
|
+
}
|
|
206
|
+
const doc = parseDocument(spliced.hasFrontmatter ? spliced.yamlText : '');
|
|
207
|
+
const node = isMap(doc.contents) ? doc.get('tags', true) : undefined;
|
|
208
|
+
const changed = isSeq(node)
|
|
209
|
+
? mutateTagSeq(doc, node, tags, operation, applied, skipped)
|
|
210
|
+
: rewriteTagList(doc, node, tags, operation, applied, skipped);
|
|
211
|
+
if (!changed)
|
|
212
|
+
return { ok: true, content };
|
|
213
|
+
return serializeFrontmatter(doc, spliced);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* The tags whose state actually differs from `present`, with every tag
|
|
217
|
+
* recorded as applied or skipped along the way. `present` is updated as the
|
|
218
|
+
* walk goes, so a tag named twice in one call changes once and is skipped
|
|
219
|
+
* thereafter — both shapes below share this bookkeeping and differ only in
|
|
220
|
+
* what they then do to the document.
|
|
221
|
+
*/
|
|
222
|
+
function planTagChanges(tags, operation, present, applied, skipped) {
|
|
223
|
+
const adding = operation === 'add';
|
|
224
|
+
const changes = [];
|
|
141
225
|
for (const tag of tags) {
|
|
226
|
+
if (present.has(tag) === adding) {
|
|
227
|
+
skipped.add(tag);
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
if (adding)
|
|
231
|
+
present.add(tag);
|
|
232
|
+
else
|
|
233
|
+
present.delete(tag);
|
|
234
|
+
changes.push(tag);
|
|
235
|
+
applied.add(tag);
|
|
236
|
+
}
|
|
237
|
+
return changes;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Edit an existing `tags:` sequence node in place.
|
|
241
|
+
*
|
|
242
|
+
* In place rather than `doc.set('tags', [...normalized])`: replacing the node
|
|
243
|
+
* discards everything the caller never named. `tags:` is free-form YAML and a
|
|
244
|
+
* vault may hold entries this server has no reading of — a number, a nested
|
|
245
|
+
* map — which the normalized string set silently dropped on the next write,
|
|
246
|
+
* along with the comments and quoting of every item that was not being touched
|
|
247
|
+
* (issue #123).
|
|
248
|
+
*/
|
|
249
|
+
function mutateTagSeq(doc, seq, tags, operation, applied, skipped) {
|
|
250
|
+
const present = new Set(seq.items.map(itemTag).filter((t) => t !== undefined));
|
|
251
|
+
const changes = planTagChanges(tags, operation, present, applied, skipped);
|
|
252
|
+
if (changes.length === 0)
|
|
253
|
+
return false;
|
|
254
|
+
for (const tag of changes) {
|
|
142
255
|
if (operation === 'add') {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
else {
|
|
146
|
-
set.add(tag);
|
|
147
|
-
applied.add(tag);
|
|
148
|
-
changed = true;
|
|
149
|
-
}
|
|
256
|
+
seq.items.push(new Scalar(tag));
|
|
257
|
+
continue;
|
|
150
258
|
}
|
|
151
|
-
|
|
152
|
-
if (
|
|
153
|
-
|
|
154
|
-
applied.add(tag);
|
|
155
|
-
changed = true;
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
skipped.add(tag);
|
|
159
|
-
}
|
|
259
|
+
for (let i = seq.items.length - 1; i >= 0; i--) {
|
|
260
|
+
if (itemTag(seq.items[i]) === tag)
|
|
261
|
+
seq.items.splice(i, 1);
|
|
160
262
|
}
|
|
161
263
|
}
|
|
162
|
-
|
|
163
|
-
|
|
264
|
+
/**
|
|
265
|
+
* The key goes only once nothing at all is left. A sequence still holding
|
|
266
|
+
* entries that are not string tags keeps them, and keeps the key they live
|
|
267
|
+
* under.
|
|
268
|
+
*/
|
|
269
|
+
if (seq.items.length === 0)
|
|
270
|
+
doc.delete('tags');
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
/** The normalized tag an item carries, or `undefined` when it is not a string scalar. */
|
|
274
|
+
function itemTag(item) {
|
|
275
|
+
if (!isScalar(item) || typeof item.value !== 'string')
|
|
276
|
+
return;
|
|
277
|
+
const tag = item.value.replace(/^#+/, '').trim();
|
|
278
|
+
return tag.length > 0 ? tag : undefined;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* The two shapes with no sequence node to edit: a string-valued `tags:`
|
|
282
|
+
* (`tags: alpha beta`) and a note carrying no `tags` key at all. Both are
|
|
283
|
+
* written out as a fresh block sequence, which is the shape Obsidian's own
|
|
284
|
+
* properties editor produces.
|
|
285
|
+
*/
|
|
286
|
+
function rewriteTagList(doc, node, tags, operation, applied, skipped) {
|
|
287
|
+
const set = new Set(normalizeTagList(isScalar(node) ? node.value : undefined));
|
|
288
|
+
if (planTagChanges(tags, operation, set, applied, skipped).length === 0)
|
|
289
|
+
return false;
|
|
164
290
|
const ordered = [...set];
|
|
165
|
-
if (ordered.length === 0)
|
|
291
|
+
if (ordered.length === 0)
|
|
166
292
|
doc.delete('tags');
|
|
167
|
-
|
|
168
|
-
else {
|
|
293
|
+
else
|
|
169
294
|
doc.set('tags', ordered);
|
|
170
|
-
|
|
171
|
-
return serializeFrontmatter(doc, body);
|
|
295
|
+
return true;
|
|
172
296
|
}
|
|
173
297
|
function normalizeTagList(value) {
|
|
174
298
|
if (Array.isArray(value)) {
|
|
@@ -206,11 +330,147 @@ const MARKDOWN_LINK = /\[[^[\]\n]*\]\([^()\n]*\)/;
|
|
|
206
330
|
*/
|
|
207
331
|
const REFERENCE_LINK = /\[[^[\]\n]+\]\[[^[\]\n]*\]/;
|
|
208
332
|
/**
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
333
|
+
* Obsidian's metadata cache reads no tag inside an HTML comment or math. The
|
|
334
|
+
* rules below are pinned against its readback (Obsidian 1.13.7) rather than a
|
|
335
|
+
* spec, and a few differ from CommonMark: an inline span ends at an empty or
|
|
336
|
+
* spaces-only line but runs through a tab-only one. Issue #138.
|
|
337
|
+
*
|
|
338
|
+
* An **HTML block** opens with `<!--` at the start of a line — after up to
|
|
339
|
+
* three spaces of indentation, or after list-item and blockquote markers — and
|
|
340
|
+
* runs through the end of the line holding the first `-->`, or to the end of
|
|
341
|
+
* the note when none follows. The whole closing line is hidden, so the tag in
|
|
342
|
+
* `<!-- a --> #rd` is not one. A line opening with `<!-->` or `<!--->` closes
|
|
343
|
+
* on itself.
|
|
344
|
+
*
|
|
345
|
+
* The prefix gives every whitespace character exactly one owner — a list
|
|
346
|
+
* marker takes the one it requires, the next marker's indent takes the rest,
|
|
347
|
+
* and the tail after the last marker takes what follows it — so the lookbehind
|
|
348
|
+
* cannot backtrack exponentially over a long run of markers. The `(?=<!--)`
|
|
349
|
+
* gate runs it only where a comment opens.
|
|
350
|
+
*/
|
|
351
|
+
const HTML_BLOCK = /(?=<!--)(?<=(?:^|\n)(?:[ \t]*(?:>|(?:[-+*]|\d{1,9}[.)])[ \t]))*(?:(?<=>)[ \t]?[ ]{0,3}|(?<=(?:[-+*]|\d[.)])[ \t])[ \t]*|[ ]{0,3}))<!--(?:-?>[^\n]*|[\s\S]*?-->[^\n]*|[\s\S]*)/;
|
|
352
|
+
/**
|
|
353
|
+
* An **inline comment** anywhere else: `<!--`, then text that does not open
|
|
354
|
+
* with `>` or `->` and holds no `--`, then `-->`, within one paragraph.
|
|
355
|
+
* `<!-- x -- y -->` is not a comment, and neither is an unclosed `<!--`.
|
|
356
|
+
*/
|
|
357
|
+
const HTML_COMMENT = /<!--(?!-?>)(?:(?!--|\n *\r?\n)[\s\S])*-->/;
|
|
358
|
+
/**
|
|
359
|
+
* A **display math block**: a line that opens with `$$` and holds no second
|
|
360
|
+
* `$$`. It runs, across empty lines, to the next line that is `$$` alone, or to
|
|
361
|
+
* the end of the note — `$$\na\nb$$` does not close it.
|
|
212
362
|
*/
|
|
213
|
-
const
|
|
363
|
+
const DISPLAY_MATH = /(?<=(?:^|\n)[ \t]*)\$\$(?![^\n]*\$\$)[\s\S]*?(?:\n[ \t]*\$\$[ \t]*(?=\r?\n|$)|$)/;
|
|
364
|
+
/** Unescaped `$$ … $$` within one paragraph, with no spacing rule. */
|
|
365
|
+
const INLINE_DOUBLE_MATH = /(?<=(?:^|[^\\])(?:\\\\)*)\$\$(?:(?!\n *\r?\n)[\s\S])*?\$\$/;
|
|
366
|
+
/**
|
|
367
|
+
* Unescaped `$ … $` within one paragraph. The opener is not followed by a space
|
|
368
|
+
* or tab; the closer is not preceded by one and not followed by a digit, and a
|
|
369
|
+
* `$` that fails those is passed over rather than ending the span. That is what
|
|
370
|
+
* keeps `cost $5 and #rc for $10` out of math while `m $a #ra b$ n` is in it.
|
|
371
|
+
*
|
|
372
|
+
* Only the opener is a regex; `inlineMathCloser` finds the closer. A lazy
|
|
373
|
+
* regex body would rescan to the end of the paragraph from every opener that
|
|
374
|
+
* never closes — quadratic in a table of prices (issue #143).
|
|
375
|
+
*/
|
|
376
|
+
const INLINE_MATH_OPEN = /(?<inlineMath>(?<=(?:^|[^\\])(?:\\\\)*)\$(?![ \t$]))/;
|
|
377
|
+
/** The start of an empty or spaces-only line, which inline math cannot cross. */
|
|
378
|
+
const PARAGRAPH_BREAK = /\n *\r?\n/y;
|
|
379
|
+
/**
|
|
380
|
+
* The closer of the inline math span each opener in `content` starts, or
|
|
381
|
+
* `undefined` when it has none. Whether a `$` can close a span does not depend
|
|
382
|
+
* on where the span opened, so the closers and paragraph breaks are listed
|
|
383
|
+
* once and each opener takes the first closer after it, provided no break
|
|
384
|
+
* comes first. Openers must be looked up in ascending order.
|
|
385
|
+
*/
|
|
386
|
+
function inlineMathCloser(content) {
|
|
387
|
+
const closers = [];
|
|
388
|
+
const breaks = [];
|
|
389
|
+
for (let i = 0; i < content.length; i++) {
|
|
390
|
+
if (content[i] === '$' && closesInlineMath(content, i))
|
|
391
|
+
closers.push(i);
|
|
392
|
+
if (content[i] === '\n') {
|
|
393
|
+
PARAGRAPH_BREAK.lastIndex = i;
|
|
394
|
+
if (PARAGRAPH_BREAK.test(content))
|
|
395
|
+
breaks.push(i);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
let c = 0;
|
|
399
|
+
let b = 0;
|
|
400
|
+
return (open) => {
|
|
401
|
+
while ((closers[c] ?? Infinity) <= open)
|
|
402
|
+
c++;
|
|
403
|
+
while ((breaks[b] ?? Infinity) <= open)
|
|
404
|
+
b++;
|
|
405
|
+
const close = closers[c];
|
|
406
|
+
if (close === undefined || (breaks[b] ?? Infinity) < close)
|
|
407
|
+
return;
|
|
408
|
+
return close;
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
/** Whether the `$` at `i` can close inline math: unescaped, after no space or tab, before no digit. */
|
|
412
|
+
function closesInlineMath(content, i) {
|
|
413
|
+
const before = content[i - 1];
|
|
414
|
+
if (before === ' ' || before === '\t' || /[0-9]/.test(content[i + 1] ?? ''))
|
|
415
|
+
return false;
|
|
416
|
+
let backslashes = 0;
|
|
417
|
+
while (content[i - 1 - backslashes] === '\\')
|
|
418
|
+
backslashes++;
|
|
419
|
+
return backslashes % 2 === 0;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Markup Obsidian parses as a node of its own, so a `#` right after it opens a
|
|
423
|
+
* tag the way one does after whitespace, while the same character as plain
|
|
424
|
+
* text blocks the tag. Protecting each span makes the `#` after it a segment
|
|
425
|
+
* start. Pinned against Obsidian 1.13.7 readback; issue #138.
|
|
426
|
+
*
|
|
427
|
+
* A **backslash escape** of ASCII punctuation: `\]#t` and `\\#t` are tags,
|
|
428
|
+
* `\#t` is an escaped hash and not one.
|
|
429
|
+
*/
|
|
430
|
+
const ESCAPE = /\\[!-/:-@[-`{-~]/;
|
|
431
|
+
/** An **inline HTML tag**: `<br>#t`, `x <b>#t</b>`, `<a href="u">#t</a>`. */
|
|
432
|
+
const HTML_TAG = /<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>\n]*)?\/?>/;
|
|
433
|
+
/**
|
|
434
|
+
* An **emphasis, highlight, or strikethrough delimiter run** directly before
|
|
435
|
+
* `#` that has a partner elsewhere on its line: `**#t**`, `*#t*`, `**x**#t`,
|
|
436
|
+
* `foo*#t*bar`, `==#t==`, `~~#t~~`. An unpartnered run is literal text to
|
|
437
|
+
* Obsidian (`a *#t`, `a ==#t`), and so is a single `~`. The partner test is
|
|
438
|
+
* the same delimiter anywhere else on the line. `_` runs are left out: `_` is a
|
|
439
|
+
* tag character, so `_#t_` would read as the tag `t_`, where Obsidian reads `t`.
|
|
440
|
+
*/
|
|
441
|
+
const EMPHASIS_RUN = /(?<!\*)(?=\*+#)(?:(?<=\*[^\n]*?)|(?=\*+#[^\n]*?\*))\*+|(?<!=)(?===#)(?:(?<===[^\n]*?)|(?===#[^\n]*?==))==|(?<!~)(?=~~#)(?:(?<=~~[^\n]*?)|(?=~~#[^\n]*?~~))~~/;
|
|
442
|
+
/**
|
|
443
|
+
* A **blockquote marker** directly before `#`: `>#t`, `> >#t`. A table cell
|
|
444
|
+
* pipe is the same kind of node (`|#t|` in a table row is a tag), but telling
|
|
445
|
+
* a table row from a pipe in prose takes the lines above it, which this
|
|
446
|
+
* one-pass scan does not look at, so `|#t` stays unread either way.
|
|
447
|
+
*/
|
|
448
|
+
const QUOTE_MARKER = />(?=#)(?<=(?:^|\n)[ \t]*(?:>[ \t]*)*>)/;
|
|
449
|
+
/**
|
|
450
|
+
* The characters that end an inline tag, as the body of a character class:
|
|
451
|
+
* whitespace, ASCII punctuation other than `_`, `-`, and `/`, and the General
|
|
452
|
+
* (U+2000–U+206F) and Supplemental (U+2E00–U+2E7F) Punctuation blocks. Every
|
|
453
|
+
* other code point — letters and digits in any script, emoji, variation
|
|
454
|
+
* selectors, combining marks, symbols such as `€` or `©` — continues a tag.
|
|
455
|
+
* Read off Obsidian's own metadata cache (1.13.7): `#café`, `#日本語`, and
|
|
456
|
+
* `#✅done` are tags, `#tag—dash` ends at the em dash, and a zero-width joiner
|
|
457
|
+
* ends a tag mid-emoji. Every regex using it carries the `u` flag, so the class
|
|
458
|
+
* matches whole code points rather than surrogate halves.
|
|
459
|
+
*/
|
|
460
|
+
const TAG_STOP = String.raw `\s!-,.:-@\[-\^\x60{-~\u2000-\u206F\u2E00-\u2E7F`;
|
|
461
|
+
/** One code point that continues an inline tag. */
|
|
462
|
+
const TAG_CHAR = `[^${TAG_STOP}]`;
|
|
463
|
+
/**
|
|
464
|
+
* A tag's left boundary: the start of a segment, or whitespace (`\s`, which
|
|
465
|
+
* takes in NBSP and U+3000). A punctuation mark that is plain text before `#`
|
|
466
|
+
* blocks a tag in Obsidian — `(#a`, `.#b`, `x—#c`, an unpartnered `a *#d` —
|
|
467
|
+
* and so does the `\` of an escaped `\#`. A segment starts at the note body or
|
|
468
|
+
* right after a protected span, and Obsidian reads a tag glued to either:
|
|
469
|
+
* `[[x]]#t`, `` `c`#t ``, `**#t**`, and `<br>#t` are tags.
|
|
470
|
+
*/
|
|
471
|
+
const TAG_LEFT_BOUNDARY = String.raw `(^|\s)`;
|
|
472
|
+
/** Obsidian rejects a tag made only of ASCII digits (`#1984`); `#1990s` and `#١٢٣` are tags. */
|
|
473
|
+
const ALL_DIGITS = /^[0-9]+$/;
|
|
214
474
|
/**
|
|
215
475
|
* Inline `#tag` syntax lives in the body. The frontmatter block is spliced off
|
|
216
476
|
* first and re-attached verbatim, so a `#` inside a YAML scalar is neither read
|
|
@@ -257,6 +517,11 @@ function mutateInlineTags(content, tags, operation, applied, skipped) {
|
|
|
257
517
|
}
|
|
258
518
|
else {
|
|
259
519
|
for (const tag of tags) {
|
|
520
|
+
/** `#1984` is text to Obsidian and to `list`, so a removal leaves it too. */
|
|
521
|
+
if (ALL_DIGITS.test(tag)) {
|
|
522
|
+
skipped.add(tag);
|
|
523
|
+
continue;
|
|
524
|
+
}
|
|
260
525
|
const re = makeInlineTagRegex(tag);
|
|
261
526
|
let found = false;
|
|
262
527
|
for (const s of segments) {
|
|
@@ -306,21 +571,52 @@ function removeAt(full, leading, trailing, offset, whole) {
|
|
|
306
571
|
}
|
|
307
572
|
/**
|
|
308
573
|
* Split the body into stretches a tag may live in and stretches it may not:
|
|
309
|
-
* code, where a `#` is code
|
|
310
|
-
*
|
|
574
|
+
* code, where a `#` is code; link syntax, where a `#` is a heading anchor or
|
|
575
|
+
* link text; HTML comments and math, where Obsidian reads no tag; and the
|
|
576
|
+
* markup after which a `#` opens a tag (`ESCAPE` through `QUOTE_MARKER`). The
|
|
577
|
+
* construct that opens first wins, so `$b <!-- c$` is math and `<!-- $b -->`
|
|
578
|
+
* is a comment. Both the read and the write path run over the result, so
|
|
311
579
|
* `list` and `remove` agree on what counts as a tag.
|
|
312
580
|
*/
|
|
313
581
|
function splitProtectedSegments(content) {
|
|
314
582
|
const segments = [];
|
|
315
583
|
let cursor = 0;
|
|
316
|
-
const re = new RegExp([
|
|
584
|
+
const re = new RegExp([
|
|
585
|
+
FENCED_CODE_BLOCK,
|
|
586
|
+
INLINE_CODE,
|
|
587
|
+
WIKILINK,
|
|
588
|
+
MARKDOWN_LINK,
|
|
589
|
+
REFERENCE_LINK,
|
|
590
|
+
HTML_BLOCK,
|
|
591
|
+
HTML_COMMENT,
|
|
592
|
+
DISPLAY_MATH,
|
|
593
|
+
INLINE_DOUBLE_MATH,
|
|
594
|
+
INLINE_MATH_OPEN,
|
|
595
|
+
ESCAPE,
|
|
596
|
+
HTML_TAG,
|
|
597
|
+
EMPHASIS_RUN,
|
|
598
|
+
QUOTE_MARKER,
|
|
599
|
+
]
|
|
317
600
|
.map((r) => r.source)
|
|
318
601
|
.join('|'), 'g');
|
|
602
|
+
const mathCloser = inlineMathCloser(content);
|
|
319
603
|
for (;;) {
|
|
320
604
|
const m = re.exec(content);
|
|
321
605
|
if (!m)
|
|
322
606
|
break;
|
|
323
|
-
|
|
607
|
+
let matched = m[0] ?? '';
|
|
608
|
+
if (m.groups?.inlineMath !== undefined) {
|
|
609
|
+
/**
|
|
610
|
+
* The `$$` constructs are tried before this one and nothing after it
|
|
611
|
+
* opens with `$`, so an opener with no closer leaves this position to
|
|
612
|
+
* plain text and the scan resumes one character on.
|
|
613
|
+
*/
|
|
614
|
+
const close = mathCloser(m.index);
|
|
615
|
+
if (close === undefined)
|
|
616
|
+
continue;
|
|
617
|
+
matched = content.slice(m.index, close + 1);
|
|
618
|
+
re.lastIndex = close + 1;
|
|
619
|
+
}
|
|
324
620
|
if (m.index > cursor) {
|
|
325
621
|
segments.push({ protected: false, text: content.slice(cursor, m.index) });
|
|
326
622
|
}
|
|
@@ -332,24 +628,29 @@ function splitProtectedSegments(content) {
|
|
|
332
628
|
}
|
|
333
629
|
return segments;
|
|
334
630
|
}
|
|
335
|
-
/**
|
|
631
|
+
/**
|
|
632
|
+
* Captures the character before the tag and the single horizontal space after
|
|
633
|
+
* it, if any. The lookahead refuses a longer tag that merely starts with `tag`
|
|
634
|
+
* — removing `caf` must not strip the front off `#café`.
|
|
635
|
+
*/
|
|
336
636
|
function makeInlineTagRegex(tag) {
|
|
337
637
|
const escaped = tag.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
|
|
338
|
-
return new RegExp(`${TAG_LEFT_BOUNDARY}#${escaped}(
|
|
638
|
+
return new RegExp(`${TAG_LEFT_BOUNDARY}#${escaped}(?!${TAG_CHAR})([ \\t]?)`, 'gu');
|
|
339
639
|
}
|
|
340
640
|
/**
|
|
341
641
|
* Read-only helpers for `obsidian_manage_tags list`. Inline tags are read from
|
|
342
642
|
* the body only, and through the same protected-segment split and left boundary
|
|
343
643
|
* a removal uses, so what `list` reports is exactly what `remove` can reach — a
|
|
344
|
-
* `#` inside a YAML scalar, a code span, a link span,
|
|
345
|
-
* none of them.
|
|
644
|
+
* `#` inside a YAML scalar, a code span, a link span, an HTML comment, or math,
|
|
645
|
+
* or one glued to the character before it (`\#`, `(#x`), is none of them. A tag
|
|
646
|
+
* runs for as long as `TAG_CHAR` matches, and an all-digit run is not a tag.
|
|
346
647
|
*/
|
|
347
648
|
export function listTagsFromContent(content, frontmatter) {
|
|
348
649
|
const fmTags = normalizeTagList(frontmatter.tags);
|
|
349
650
|
const inline = [];
|
|
350
651
|
const seen = new Set();
|
|
351
652
|
/** Each segment is scanned to exhaustion, which resets `lastIndex` between them. */
|
|
352
|
-
const re = new RegExp(`${TAG_LEFT_BOUNDARY}#(
|
|
653
|
+
const re = new RegExp(`${TAG_LEFT_BOUNDARY}#(${TAG_CHAR}+)`, 'gu');
|
|
353
654
|
for (const seg of splitProtectedSegments(splice(content).body)) {
|
|
354
655
|
if (seg.protected)
|
|
355
656
|
continue;
|
|
@@ -358,7 +659,7 @@ export function listTagsFromContent(content, frontmatter) {
|
|
|
358
659
|
if (!m)
|
|
359
660
|
break;
|
|
360
661
|
const t = m[2];
|
|
361
|
-
if (t && !seen.has(t)) {
|
|
662
|
+
if (t && !ALL_DIGITS.test(t) && !seen.has(t)) {
|
|
362
663
|
seen.add(t);
|
|
363
664
|
inline.push(t);
|
|
364
665
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter-ops.js","sourceRoot":"","sources":["../../../src/services/obsidian/frontmatter-ops.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frontmatter-ops.js","sourceRoot":"","sources":["../../../src/services/obsidian/frontmatter-ops.ts"],"names":[],"mappings":"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"}
|