@novis10813/secondbrain-cli 0.1.0 → 0.1.2

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.
Files changed (93) hide show
  1. package/README.md +71 -81
  2. package/dist/commands/backlinks.d.ts.map +1 -1
  3. package/dist/commands/backlinks.js +16 -33
  4. package/dist/commands/backlinks.js.map +1 -1
  5. package/dist/commands/capture.d.ts.map +1 -1
  6. package/dist/commands/capture.js +71 -57
  7. package/dist/commands/capture.js.map +1 -1
  8. package/dist/commands/config.d.ts.map +1 -1
  9. package/dist/commands/config.js +5 -20
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/get.js +27 -26
  12. package/dist/commands/get.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +21 -4
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/migrate.d.ts +3 -0
  17. package/dist/commands/migrate.d.ts.map +1 -0
  18. package/dist/commands/migrate.js +22 -0
  19. package/dist/commands/migrate.js.map +1 -0
  20. package/dist/commands/open.d.ts +3 -0
  21. package/dist/commands/open.d.ts.map +1 -0
  22. package/dist/commands/open.js +28 -0
  23. package/dist/commands/open.js.map +1 -0
  24. package/dist/commands/orphans.d.ts.map +1 -1
  25. package/dist/commands/orphans.js +9 -27
  26. package/dist/commands/orphans.js.map +1 -1
  27. package/dist/commands/outlinks.d.ts +3 -0
  28. package/dist/commands/outlinks.d.ts.map +1 -0
  29. package/dist/commands/outlinks.js +48 -0
  30. package/dist/commands/outlinks.js.map +1 -0
  31. package/dist/commands/search.d.ts +2 -0
  32. package/dist/commands/search.d.ts.map +1 -1
  33. package/dist/commands/search.js +57 -39
  34. package/dist/commands/search.js.map +1 -1
  35. package/dist/commands/stats.d.ts.map +1 -1
  36. package/dist/commands/stats.js +4 -18
  37. package/dist/commands/stats.js.map +1 -1
  38. package/dist/commands/sync.d.ts.map +1 -1
  39. package/dist/commands/sync.js +3 -17
  40. package/dist/commands/sync.js.map +1 -1
  41. package/dist/commands/template.d.ts +3 -0
  42. package/dist/commands/template.d.ts.map +1 -0
  43. package/dist/commands/template.js +63 -0
  44. package/dist/commands/template.js.map +1 -0
  45. package/dist/commands/vault.d.ts +3 -0
  46. package/dist/commands/vault.d.ts.map +1 -0
  47. package/dist/commands/vault.js +233 -0
  48. package/dist/commands/vault.js.map +1 -0
  49. package/dist/index.js +13 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/types/index.d.ts +134 -10
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/utils/config.d.ts +3 -1
  54. package/dist/utils/config.d.ts.map +1 -1
  55. package/dist/utils/config.js +12 -0
  56. package/dist/utils/config.js.map +1 -1
  57. package/dist/utils/database.d.ts +58 -14
  58. package/dist/utils/database.d.ts.map +1 -1
  59. package/dist/utils/database.js +627 -207
  60. package/dist/utils/database.js.map +1 -1
  61. package/dist/utils/global-config.d.ts +53 -0
  62. package/dist/utils/global-config.d.ts.map +1 -0
  63. package/dist/utils/global-config.js +144 -0
  64. package/dist/utils/global-config.js.map +1 -0
  65. package/dist/utils/parser.d.ts +95 -2
  66. package/dist/utils/parser.d.ts.map +1 -1
  67. package/dist/utils/parser.js +466 -39
  68. package/dist/utils/parser.js.map +1 -1
  69. package/dist/utils/placeholder.d.ts +37 -0
  70. package/dist/utils/placeholder.d.ts.map +1 -0
  71. package/dist/utils/placeholder.js +113 -0
  72. package/dist/utils/placeholder.js.map +1 -0
  73. package/dist/utils/position.d.ts +10 -0
  74. package/dist/utils/position.d.ts.map +1 -0
  75. package/dist/utils/position.js +24 -0
  76. package/dist/utils/position.js.map +1 -0
  77. package/dist/utils/sqlite-adapter.d.ts +8 -0
  78. package/dist/utils/sqlite-adapter.d.ts.map +1 -0
  79. package/dist/utils/sqlite-adapter.js +14 -0
  80. package/dist/utils/sqlite-adapter.js.map +1 -0
  81. package/dist/utils/template.d.ts +2 -2
  82. package/dist/utils/template.d.ts.map +1 -1
  83. package/dist/utils/template.js +8 -3
  84. package/dist/utils/template.js.map +1 -1
  85. package/dist/utils/vault-resolve.d.ts +23 -0
  86. package/dist/utils/vault-resolve.d.ts.map +1 -0
  87. package/dist/utils/vault-resolve.js +86 -0
  88. package/dist/utils/vault-resolve.js.map +1 -0
  89. package/dist/utils/vault.d.ts +77 -10
  90. package/dist/utils/vault.d.ts.map +1 -1
  91. package/dist/utils/vault.js +262 -98
  92. package/dist/utils/vault.js.map +1 -1
  93. package/package.json +9 -3
@@ -36,20 +36,98 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.NoteParser = void 0;
37
37
  const crypto_1 = require("crypto");
38
38
  const yaml = __importStar(require("yaml"));
39
+ const position_js_1 = require("./position.js");
39
40
  class NoteParser {
40
41
  static parse(content) {
41
- const { frontmatter, body } = this.extractFrontmatter(content);
42
+ const { frontmatter, body, bodyStartIndex } = this.extractFrontmatter(content);
43
+ const codeRanges = this.getCodeBlockRanges(body);
42
44
  const title = this.extractTitle(body);
43
- const tags = this.extractTags(frontmatter, body);
44
- const links = this.extractLinks(frontmatter, body);
45
+ const frontmatterPosition = bodyStartIndex > 0 ? (0, position_js_1.rangeToPos)(content, 0, bodyStartIndex) : undefined;
46
+ const tags = this.extractTags(frontmatter, body, codeRanges, content, bodyStartIndex, frontmatterPosition);
47
+ const links = this.extractLinks(frontmatter, body, content, bodyStartIndex, frontmatterPosition);
48
+ const headings = this.extractHeadings(body, codeRanges, content, bodyStartIndex);
49
+ const headingStructure = this.buildHeadingStructure(headings);
50
+ const bodyBlockRefs = this.extractBlockRefs(body, codeRanges, content, bodyStartIndex);
51
+ const embeds = this.extractEmbeds(body, codeRanges, content, bodyStartIndex);
52
+ const blockRefs = this.mergeBlockRefsFromLinks(bodyBlockRefs, links, embeds);
53
+ const listItems = this.extractListItems(body, codeRanges, content, bodyStartIndex);
54
+ const footnotes = this.extractFootnoteDefinitions(body, codeRanges, content, bodyStartIndex);
55
+ const footnoteRefs = this.extractFootnoteRefs(body, codeRanges, content, bodyStartIndex);
45
56
  return {
46
57
  title,
47
58
  content: body,
48
59
  frontmatter,
60
+ frontmatterPosition,
49
61
  tags,
50
- links
62
+ links,
63
+ headings,
64
+ headingStructure,
65
+ blockRefs,
66
+ embeds,
67
+ listItems,
68
+ footnotes,
69
+ footnoteRefs
51
70
  };
52
71
  }
72
+ /** Extract block ID from link/embed target like "path#^block-id" or "path#heading#^block-id". */
73
+ static parseBlockIdFromTarget(target) {
74
+ const m = target.match(/#\^([a-zA-Z0-9_-]+)$/);
75
+ return m ? m[1] : null;
76
+ }
77
+ static mergeBlockRefsFromLinks(bodyBlockRefs, links, embeds) {
78
+ const result = [...bodyBlockRefs];
79
+ const seen = new Set(bodyBlockRefs.map(b => b.blockId));
80
+ for (const link of links) {
81
+ const blockId = this.parseBlockIdFromTarget(link.target);
82
+ if (blockId && !seen.has(blockId)) {
83
+ seen.add(blockId);
84
+ result.push({
85
+ blockId,
86
+ line: link.line,
87
+ column: link.column,
88
+ position: link.position
89
+ });
90
+ }
91
+ }
92
+ for (const embed of embeds) {
93
+ const blockId = this.parseBlockIdFromTarget(embed.target);
94
+ if (blockId && !seen.has(blockId)) {
95
+ seen.add(blockId);
96
+ result.push({
97
+ blockId,
98
+ line: embed.line,
99
+ column: embed.column,
100
+ position: embed.position
101
+ });
102
+ }
103
+ }
104
+ return result;
105
+ }
106
+ static indexToPosition(content, index) {
107
+ const before = content.slice(0, index);
108
+ const lastNewline = before.lastIndexOf('\n');
109
+ const line = (before.match(/\n/g)?.length ?? 0) + 1;
110
+ const column = lastNewline === -1 ? index + 1 : index - lastNewline;
111
+ return { line, column };
112
+ }
113
+ static getCodeBlockRanges(content) {
114
+ const ranges = [];
115
+ const fenced = /```[^`]*?```/g;
116
+ let m;
117
+ while ((m = fenced.exec(content)) !== null) {
118
+ ranges.push([m.index, m.index + m[0].length]);
119
+ }
120
+ const inline = /`[^`]*`/g;
121
+ while ((m = inline.exec(content)) !== null) {
122
+ if (!ranges.some(([s, e]) => m.index >= s && m.index < e)) {
123
+ ranges.push([m.index, m.index + m[0].length]);
124
+ }
125
+ }
126
+ return ranges;
127
+ }
128
+ static isInCodeBlock(index, ranges) {
129
+ return ranges.some(([s, e]) => index >= s && index < e);
130
+ }
53
131
  static computeHash(content) {
54
132
  return (0, crypto_1.createHash)('sha256').update(content).digest('hex');
55
133
  }
@@ -58,15 +136,44 @@ class NoteParser {
58
136
  const match = content.match(frontmatterRegex);
59
137
  if (match) {
60
138
  try {
61
- const frontmatter = yaml.parse(match[1]) || {};
139
+ // Pre-process: replace {{PLACEHOLDER}} template syntax with quoted strings
140
+ // before YAML parsing, to prevent YAML from interpreting {key:val} as a flow mapping.
141
+ // We restore the original values after parsing.
142
+ const placeholderMap = new Map();
143
+ let idx = 0;
144
+ const sanitized = match[1].replace(/\{\{[^}]+\}\}/g, (m) => {
145
+ const key = `__SBPH${idx++}_`;
146
+ placeholderMap.set(key, m);
147
+ // Use bare scalar (no quotes) so YAML parses it as a plain string.
148
+ // This works whether the original value was quoted or unquoted.
149
+ return key;
150
+ });
151
+ const raw = yaml.parse(sanitized) || {};
152
+ // Post-process: walk parsed object and restore placeholder strings
153
+ const restore = (obj) => {
154
+ if (typeof obj === 'string') {
155
+ let s = obj;
156
+ for (const [k, v] of placeholderMap) {
157
+ s = s.replace(k, v);
158
+ }
159
+ return s;
160
+ }
161
+ if (Array.isArray(obj))
162
+ return obj.map(restore);
163
+ if (obj && typeof obj === 'object') {
164
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, restore(v)]));
165
+ }
166
+ return obj;
167
+ };
168
+ const frontmatter = restore(raw);
62
169
  const body = content.slice(match[0].length);
63
- return { frontmatter, body };
170
+ return { frontmatter, body, bodyStartIndex: match[0].length };
64
171
  }
65
172
  catch {
66
173
  // Invalid YAML, treat as no frontmatter
67
174
  }
68
175
  }
69
- return { frontmatter: {}, body: content };
176
+ return { frontmatter: {}, body: content, bodyStartIndex: 0 };
70
177
  }
71
178
  static extractTitle(content) {
72
179
  // Look for first H1 heading
@@ -81,62 +188,217 @@ class NoteParser {
81
188
  }
82
189
  return 'Untitled';
83
190
  }
84
- static extractTags(frontmatter, content) {
85
- const tags = new Set();
86
- // From frontmatter
191
+ static extractTags(frontmatter, body, codeRanges, content, bodyStartIndex, frontmatterPosition) {
192
+ const seen = new Set();
193
+ const result = [];
194
+ const fmLine = { line: 1, column: 1 };
195
+ const fmPosition = frontmatterPosition ?? (0, position_js_1.rangeToPos)(content, 0, Math.min(1, content.length));
87
196
  if (frontmatter.tags) {
88
197
  if (Array.isArray(frontmatter.tags)) {
89
- frontmatter.tags.forEach(tag => tags.add(String(tag)));
198
+ for (const tag of frontmatter.tags) {
199
+ const name = String(tag).replace(/^#/, '');
200
+ if (name) {
201
+ result.push({ name, ...fmLine, position: fmPosition });
202
+ }
203
+ }
90
204
  }
91
205
  else if (typeof frontmatter.tags === 'string') {
92
- frontmatter.tags.split(/[,\s]+/).forEach(tag => {
93
- if (tag)
94
- tags.add(tag.replace(/^#/, ''));
95
- });
206
+ for (const tag of frontmatter.tags.split(/[,\s]+/)) {
207
+ const name = tag.replace(/^#/, '');
208
+ if (name) {
209
+ result.push({ name, ...fmLine, position: fmPosition });
210
+ }
211
+ }
96
212
  }
97
213
  }
98
- // From content body (Obsidian-style #tags)
99
- // Strip code blocks to avoid extracting tags from code
100
- const contentWithoutCode = content
101
- .replace(/```[\s\S]*?```/g, '') // Remove fenced code blocks
102
- .replace(/`[^`]*`/g, ''); // Remove inline code
103
214
  const tagRegex = /#([\w/-]+)/g;
104
215
  let match;
105
- while ((match = tagRegex.exec(contentWithoutCode)) !== null) {
106
- // Exclude headings
107
- if (!contentWithoutCode.substring(match.index - 1, match.index).match(/\n|^/)) {
216
+ while ((match = tagRegex.exec(body)) !== null) {
217
+ if (this.isInCodeBlock(match.index, codeRanges))
108
218
  continue;
109
- }
110
- tags.add(match[1]);
219
+ const charBefore = match.index === 0 ? '\n' : body[match.index - 1];
220
+ const atLineStart = charBefore === '\n' || charBefore === '\r';
221
+ if (atLineStart && body.slice(match.index).match(/^#{1,6}\s+/))
222
+ continue; // heading
223
+ if (!atLineStart && !/[\s]/.test(charBefore))
224
+ continue; // require space/newline before #tag
225
+ const name = match[1];
226
+ const pos = this.indexToPosition(body, match.index);
227
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
228
+ result.push({ name, line: pos.line, column: pos.column, position });
229
+ }
230
+ return result;
231
+ }
232
+ static extractLinks(frontmatter, body, content, bodyStartIndex, frontmatterPosition) {
233
+ const result = [];
234
+ const fmPos = { line: 1, column: 1 };
235
+ const fmPosition = frontmatterPosition ?? (0, position_js_1.rangeToPos)(content, 0, Math.min(1, content.length));
236
+ this.extractLinksFromObject(frontmatter, (target) => {
237
+ result.push({ target, ...fmPos, position: fmPosition });
238
+ });
239
+ // Obsidian links [[x]] or [[x|label]]; exclude embeds ![[x]]
240
+ const linkRegex = /(?<!!)\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
241
+ let match;
242
+ while ((match = linkRegex.exec(body)) !== null) {
243
+ const target = match[1].trim();
244
+ const pos = this.indexToPosition(body, match.index);
245
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
246
+ result.push({ target, line: pos.line, column: pos.column, position });
247
+ }
248
+ return result;
249
+ }
250
+ static extractEmbeds(body, codeRanges, content, bodyStartIndex) {
251
+ const result = [];
252
+ // Obsidian embeds: ![[path]] or ![[path|display]]; skip inside code blocks
253
+ const embedRegex = /!\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
254
+ let match;
255
+ while ((match = embedRegex.exec(body)) !== null) {
256
+ if (this.isInCodeBlock(match.index, codeRanges))
257
+ continue;
258
+ const target = match[1].trim();
259
+ const pos = this.indexToPosition(body, match.index);
260
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
261
+ result.push({ target, line: pos.line, column: pos.column, position });
262
+ }
263
+ return result;
264
+ }
265
+ static extractListItems(body, codeRanges, content, bodyStartIndex) {
266
+ const result = [];
267
+ // Match list items: unordered (-, *, +) or ordered (1., 2., etc.)
268
+ // Also match task items: - [ ] or - [x] or - [X]
269
+ // Pattern: (indentation)(marker)(optional task checkbox)(content)
270
+ const listItemRegex = /^(\s*)([-*+]|\d+\.)\s+(\[([ xX])\])?\s*(.+)$/gm;
271
+ let match;
272
+ while ((match = listItemRegex.exec(body)) !== null) {
273
+ if (this.isInCodeBlock(match.index, codeRanges))
274
+ continue;
275
+ const indent = match[1];
276
+ const level = Math.floor(indent.length / 2); // Typically 2 spaces per level
277
+ const taskCheckbox = match[3]; // '[x]', '[X]', '[ ]', or undefined
278
+ const taskChar = match[4]; // 'x', 'X', ' ', or undefined
279
+ // task is 'x' for checked tasks, undefined for unchecked/non-task items
280
+ const task = taskCheckbox && (taskChar === 'x' || taskChar === 'X') ? 'x' : undefined;
281
+ const pos = this.indexToPosition(body, match.index);
282
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
283
+ result.push({
284
+ level,
285
+ task,
286
+ line: pos.line,
287
+ column: pos.column,
288
+ position
289
+ });
290
+ }
291
+ return result;
292
+ }
293
+ static extractFootnoteDefinitions(body, codeRanges, content, bodyStartIndex) {
294
+ const result = [];
295
+ const definitionRegex = /^(\s*)\[\^([^\]]+)\]:\s*(.*)$/gm;
296
+ let match;
297
+ while ((match = definitionRegex.exec(body)) !== null) {
298
+ if (this.isInCodeBlock(match.index, codeRanges))
299
+ continue;
300
+ const id = match[2].trim();
301
+ const contentText = (match[3] ?? '').trim();
302
+ const pos = this.indexToPosition(body, match.index);
303
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
304
+ result.push({ id, content: contentText, line: pos.line, column: pos.column, position });
111
305
  }
112
- return Array.from(tags);
306
+ return result;
113
307
  }
114
- static extractLinks(frontmatter, content) {
115
- const links = new Set();
116
- // Extract from frontmatter values
117
- this.extractLinksFromObject(frontmatter, links);
118
- // Extract from content body (Obsidian wikilinks)
119
- const linkRegex = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
308
+ static extractFootnoteRefs(body, codeRanges, content, bodyStartIndex) {
309
+ const result = [];
310
+ const refRegex = /\[\^([^\]]+)\]/g;
120
311
  let match;
121
- while ((match = linkRegex.exec(content)) !== null) {
122
- links.add(match[1].trim());
312
+ while ((match = refRegex.exec(body)) !== null) {
313
+ if (this.isInCodeBlock(match.index, codeRanges))
314
+ continue;
315
+ const after = body[match.index + match[0].length];
316
+ if (after === ':')
317
+ continue;
318
+ const id = match[1].trim();
319
+ const pos = this.indexToPosition(body, match.index);
320
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
321
+ result.push({ id, line: pos.line, column: pos.column, position });
123
322
  }
124
- return Array.from(links);
323
+ return result;
125
324
  }
126
- static extractLinksFromObject(obj, links) {
325
+ static extractLinksFromObject(obj, onLink) {
127
326
  if (typeof obj === 'string') {
128
327
  const linkRegex = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
129
328
  let match;
130
329
  while ((match = linkRegex.exec(obj)) !== null) {
131
- links.add(match[1].trim());
330
+ onLink(match[1].trim());
132
331
  }
133
332
  }
134
333
  else if (Array.isArray(obj)) {
135
- obj.forEach(item => this.extractLinksFromObject(item, links));
334
+ obj.forEach(item => this.extractLinksFromObject(item, onLink));
136
335
  }
137
336
  else if (obj && typeof obj === 'object') {
138
- Object.values(obj).forEach(value => this.extractLinksFromObject(value, links));
337
+ Object.values(obj).forEach(value => this.extractLinksFromObject(value, onLink));
338
+ }
339
+ }
340
+ static extractHeadings(body, codeRanges, content, bodyStartIndex) {
341
+ const result = [];
342
+ const headingRegex = /^(#{1,6})\s+(.+)$/gm;
343
+ let match;
344
+ while ((match = headingRegex.exec(body)) !== null) {
345
+ if (this.isInCodeBlock(match.index, codeRanges))
346
+ continue;
347
+ const level = match[1].length;
348
+ const text = match[2].trim();
349
+ const pos = this.indexToPosition(body, match.index);
350
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
351
+ result.push({ level, text, line: pos.line, column: pos.column, position });
139
352
  }
353
+ return result;
354
+ }
355
+ static buildHeadingStructure(headings) {
356
+ const root = [];
357
+ const stack = [];
358
+ for (const heading of headings) {
359
+ const node = {
360
+ level: heading.level,
361
+ text: heading.text,
362
+ line: heading.line,
363
+ column: heading.column,
364
+ position: heading.position,
365
+ children: []
366
+ };
367
+ // Find the appropriate parent: the most recent heading with a lower level
368
+ while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) {
369
+ stack.pop();
370
+ }
371
+ if (stack.length === 0) {
372
+ // No parent found, add to root
373
+ root.push(node);
374
+ }
375
+ else {
376
+ // Add as child of the most recent parent
377
+ stack[stack.length - 1].children.push(node);
378
+ }
379
+ // Push current node onto stack for potential children
380
+ stack.push(node);
381
+ }
382
+ return root;
383
+ }
384
+ static extractBlockRefs(body, codeRanges, content, bodyStartIndex) {
385
+ const result = [];
386
+ const seen = new Set();
387
+ // Obsidian block ref: ^block-id (alphanumeric, hyphens, underscores)
388
+ const blockRefRegex = /\^([a-zA-Z0-9_-]+)/g;
389
+ let match;
390
+ while ((match = blockRefRegex.exec(body)) !== null) {
391
+ if (this.isInCodeBlock(match.index, codeRanges))
392
+ continue;
393
+ const blockId = match[1];
394
+ if (seen.has(blockId))
395
+ continue;
396
+ seen.add(blockId);
397
+ const pos = this.indexToPosition(body, match.index);
398
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
399
+ result.push({ blockId, line: pos.line, column: pos.column, position });
400
+ }
401
+ return result;
140
402
  }
141
403
  static generateNoteContent(title, content, frontmatter = {}) {
142
404
  const fm = yaml.stringify(frontmatter).trim();
@@ -154,6 +416,171 @@ class NoteParser {
154
416
  };
155
417
  return this.generateNoteContent(dateStr, content, frontmatter);
156
418
  }
419
+ /**
420
+ * Convert HeadingRef[] to HeadingCache[] for ContentMetadata.
421
+ * Maps `text` property to `heading` property.
422
+ */
423
+ static headingsToCache(headings) {
424
+ return headings.map(h => ({
425
+ heading: h.text,
426
+ level: h.level,
427
+ position: h.position
428
+ }));
429
+ }
430
+ /**
431
+ * Build document sections from parsed note (Obsidian-aligned).
432
+ * Sections: frontmatter (if present), then one section per heading from that heading to the next
433
+ * (or end of file). With no headings, a single content section from body start to EOF.
434
+ */
435
+ static buildSections(parsed, fullContent) {
436
+ const sections = [];
437
+ const bodyStartOffset = parsed.frontmatterPosition != null ? parsed.frontmatterPosition.end.offset + 1 : 0;
438
+ if (parsed.frontmatterPosition != null) {
439
+ sections.push({
440
+ id: 'frontmatter',
441
+ type: 'frontmatter',
442
+ position: parsed.frontmatterPosition
443
+ });
444
+ }
445
+ const headings = parsed.headings;
446
+ if (headings.length === 0) {
447
+ sections.push({
448
+ id: '0',
449
+ type: 'content',
450
+ position: (0, position_js_1.rangeToPos)(fullContent, bodyStartOffset, fullContent.length)
451
+ });
452
+ return sections;
453
+ }
454
+ for (let i = 0; i < headings.length; i++) {
455
+ const startOffset = headings[i].position.start.offset;
456
+ const endOffset = i + 1 < headings.length ? headings[i + 1].position.start.offset : fullContent.length;
457
+ sections.push({
458
+ id: String(i),
459
+ type: 'heading',
460
+ position: (0, position_js_1.rangeToPos)(fullContent, startOffset, endOffset)
461
+ });
462
+ }
463
+ return sections;
464
+ }
465
+ /**
466
+ * Convert ListItemRef[] to ListItemCache[] for ContentMetadata.
467
+ * Preserves task status and position information.
468
+ */
469
+ static listItemsToCache(listItems) {
470
+ return listItems.map(li => ({
471
+ task: li.task,
472
+ position: li.position
473
+ }));
474
+ }
475
+ /**
476
+ * Convert ParsedNote to ContentMetadata (Obsidian CachedMetadata format).
477
+ * Separates content-derived metadata from file system information.
478
+ */
479
+ static parsedToContentMetadata(parsed, originalContent) {
480
+ const metadata = {};
481
+ // Convert links
482
+ if (parsed.links.length > 0) {
483
+ metadata.links = parsed.links.map((link) => {
484
+ // Try to extract display text from original content if available
485
+ let displayText;
486
+ let original = `[[${link.target}]]`;
487
+ if (originalContent) {
488
+ const startOffset = link.position.start.offset;
489
+ const endOffset = link.position.end.offset;
490
+ const linkText = originalContent.slice(startOffset, endOffset);
491
+ const match = linkText.match(/\[\[([^\]]+)\]\]/);
492
+ if (match) {
493
+ original = match[0];
494
+ const parts = match[1].split('|');
495
+ if (parts.length > 1) {
496
+ displayText = parts.slice(1).join('|');
497
+ }
498
+ }
499
+ }
500
+ return {
501
+ link: link.target,
502
+ original,
503
+ displayText,
504
+ position: link.position
505
+ };
506
+ });
507
+ }
508
+ // Convert embeds
509
+ if (parsed.embeds.length > 0) {
510
+ metadata.embeds = parsed.embeds.map((embed) => {
511
+ // Try to extract display text from original content if available
512
+ let displayText;
513
+ let original = `![[${embed.target}]]`;
514
+ if (originalContent) {
515
+ const startOffset = embed.position.start.offset;
516
+ const endOffset = embed.position.end.offset;
517
+ const embedText = originalContent.slice(startOffset, endOffset);
518
+ const match = embedText.match(/!\[\[([^\]]+)\]\]/);
519
+ if (match) {
520
+ original = match[0];
521
+ const parts = match[1].split('|');
522
+ if (parts.length > 1) {
523
+ displayText = parts.slice(1).join('|');
524
+ }
525
+ }
526
+ }
527
+ return {
528
+ link: embed.target,
529
+ original,
530
+ displayText,
531
+ position: embed.position
532
+ };
533
+ });
534
+ }
535
+ // Convert tags
536
+ if (parsed.tags.length > 0) {
537
+ metadata.tags = parsed.tags.map((tag) => ({
538
+ tag: tag.name,
539
+ position: tag.position
540
+ }));
541
+ }
542
+ // Convert headings
543
+ if (parsed.headings.length > 0) {
544
+ metadata.headings = this.headingsToCache(parsed.headings);
545
+ }
546
+ // Convert blocks
547
+ if (parsed.blockRefs.length > 0) {
548
+ metadata.blocks = parsed.blockRefs.map((block) => ({
549
+ id: block.blockId,
550
+ position: block.position
551
+ }));
552
+ }
553
+ // Convert frontmatter position
554
+ if (parsed.frontmatterPosition) {
555
+ metadata.frontmatter = {
556
+ position: parsed.frontmatterPosition
557
+ };
558
+ }
559
+ // Convert list items
560
+ if (parsed.listItems.length > 0) {
561
+ metadata.listItems = this.listItemsToCache(parsed.listItems);
562
+ }
563
+ // Convert footnotes (definitions)
564
+ if (parsed.footnotes.length > 0) {
565
+ metadata.footnotes = parsed.footnotes.map((fn) => ({
566
+ id: fn.id,
567
+ content: fn.content,
568
+ position: fn.position
569
+ }));
570
+ }
571
+ // Convert footnote refs
572
+ if (parsed.footnoteRefs.length > 0) {
573
+ metadata.footnoteRefs = parsed.footnoteRefs.map((ref) => ({
574
+ id: ref.id,
575
+ position: ref.position
576
+ }));
577
+ }
578
+ // Sections (from headings + frontmatter); require full content for correct positions
579
+ if (originalContent != null) {
580
+ metadata.sections = this.buildSections(parsed, originalContent);
581
+ }
582
+ return metadata;
583
+ }
157
584
  }
158
585
  exports.NoteParser = NoteParser;
159
586
  //# sourceMappingURL=parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { PlaceholderContext } from '../types/index.js';
2
+ /**
3
+ * Parse a DATE placeholder token and return the formatted date string.
4
+ *
5
+ * Supported formats:
6
+ * DATE → default 'YYYY-MM-DD'
7
+ * DATE:format → custom moment format
8
+ * DATE+N / DATE-N → offset by N days, default format
9
+ * DATE:format+N → custom format + day offset
10
+ */
11
+ export declare function parseDatePlaceholder(token: string, baseDate: Date): string;
12
+ /**
13
+ * Parse a TIME placeholder token and return the formatted time string.
14
+ *
15
+ * Supported formats:
16
+ * TIME → default 'HH:mm'
17
+ * TIME:format → custom moment format
18
+ */
19
+ export declare function parseTimePlaceholder(token: string, baseDate: Date): string;
20
+ /**
21
+ * Process all built-in placeholders in a template string.
22
+ *
23
+ * Built-in placeholders (uppercase keywords):
24
+ * {{DATE}} → today's date (YYYY-MM-DD)
25
+ * {{DATE:format}} → custom moment format
26
+ * {{DATE+N}} → N days from today
27
+ * {{DATE:format+N}} → custom format + offset
28
+ * {{TIME}} → current time (HH:mm)
29
+ * {{TIME:format}} → custom moment format
30
+ * {{TITLE}} → context.title (left as-is if not provided)
31
+ * {{VAULT}} → context.vault (left as-is if not provided)
32
+ * {{UUID}} → random UUID v4 (unique per occurrence)
33
+ *
34
+ * User-defined lowercase {{variable}} placeholders are NOT touched.
35
+ */
36
+ export declare function processPlaceholders(template: string, context: PlaceholderContext): string;
37
+ //# sourceMappingURL=placeholder.d.ts.map