@bitbonsai/mcpvault 0.12.0 → 0.12.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/frontmatter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/frontmatter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAkB1E;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAmB5E;AAED,qBAAa,kBAAkB;IAC7B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAoBlC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAaxE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,2BAA2B;IAqB3E,OAAO,CAAC,yBAAyB;IAmDjC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAyB3F,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAKxD,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;CAWzE"}
|
package/dist/src/frontmatter.js
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import matter from 'gray-matter';
|
|
2
|
-
import { parseDocument } from 'yaml';
|
|
2
|
+
import { parse, stringify, parseDocument } from 'yaml';
|
|
3
|
+
// Use the 'yaml' package as gray-matter's engine instead of js-yaml.
|
|
4
|
+
// js-yaml@3.x (pinned by gray-matter@4) has known quadratic-DoS via
|
|
5
|
+
// crafted YAML merge-key aliases (CVE-2023-44270). The 'yaml' package
|
|
6
|
+
// is already a dependency (used in preserveStringify) and is not affected.
|
|
7
|
+
const yamlEngine = {
|
|
8
|
+
// YAML 1.2 schema (default). Dates stay as strings, but this avoids the
|
|
9
|
+
// yaml-1.1 bug where single-letter keys like 'y'/'n' become booleans.
|
|
10
|
+
// Merge keys (<<) are not resolved, which is fine for Obsidian frontmatter.
|
|
11
|
+
parse: (str) => parse(str),
|
|
12
|
+
stringify: (data) => stringify(data),
|
|
13
|
+
};
|
|
14
|
+
function withYamlEngine(options = {}) {
|
|
15
|
+
return { ...options, engines: { yaml: yamlEngine } };
|
|
16
|
+
}
|
|
3
17
|
/**
|
|
4
18
|
* Parse a frontmatter value that may be a JSON string (LLM clients sometimes
|
|
5
19
|
* pass frontmatter as a serialized JSON string instead of an object).
|
|
@@ -29,7 +43,7 @@ export function parseFrontmatter(value) {
|
|
|
29
43
|
export class FrontmatterHandler {
|
|
30
44
|
parse(content) {
|
|
31
45
|
try {
|
|
32
|
-
const parsed = matter(content);
|
|
46
|
+
const parsed = matter(content, withYamlEngine());
|
|
33
47
|
return {
|
|
34
48
|
frontmatter: parsed.data,
|
|
35
49
|
content: parsed.content,
|
|
@@ -53,7 +67,7 @@ export class FrontmatterHandler {
|
|
|
53
67
|
if (!frontmatterData || Object.keys(frontmatterData).length === 0) {
|
|
54
68
|
return content;
|
|
55
69
|
}
|
|
56
|
-
return matter.stringify(content, frontmatterData);
|
|
70
|
+
return matter.stringify(content, frontmatterData, withYamlEngine());
|
|
57
71
|
}
|
|
58
72
|
catch (error) {
|
|
59
73
|
throw new Error(`Failed to stringify frontmatter: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
@@ -67,7 +81,7 @@ export class FrontmatterHandler {
|
|
|
67
81
|
};
|
|
68
82
|
try {
|
|
69
83
|
// Test if the frontmatter can be serialized to valid YAML using gray-matter
|
|
70
|
-
matter.stringify('', frontmatterData);
|
|
84
|
+
matter.stringify('', frontmatterData, withYamlEngine());
|
|
71
85
|
}
|
|
72
86
|
catch (error) {
|
|
73
87
|
result.isValid = false;
|
|
@@ -123,7 +137,7 @@ export class FrontmatterHandler {
|
|
|
123
137
|
if (!updates || Object.keys(updates).length === 0) {
|
|
124
138
|
return content;
|
|
125
139
|
}
|
|
126
|
-
return matter.stringify(content, updates);
|
|
140
|
+
return matter.stringify(content, updates, withYamlEngine());
|
|
127
141
|
}
|
|
128
142
|
const doc = parseDocument(rawMatter.trimStart());
|
|
129
143
|
for (const [key, value] of Object.entries(updates)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitbonsai/mcpvault",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "Universal AI bridge for Obsidian vaults - connect any MCP-compatible assistant",
|
|
5
5
|
"homepage": "https://mcpvault.org",
|
|
6
6
|
"author": "bitbonsai",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"yaml": "^2.8.3"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@types/node": "^
|
|
45
|
+
"@types/node": "^26.0.0",
|
|
46
46
|
"tsx": "^4.20.6",
|
|
47
47
|
"typescript": "^6.0.2",
|
|
48
48
|
"vitest": "^4.0.15"
|