@macroforge/mcp-server 0.1.25 → 0.1.26
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/tools/docs-loader.d.ts +3 -0
- package/dist/tools/docs-loader.d.ts.map +1 -1
- package/dist/tools/docs-loader.js +4 -0
- package/dist/tools/docs-loader.js.map +1 -1
- package/dist/tools/index.js +60 -3
- package/dist/tools/index.js.map +1 -1
- package/docs/builtin-macros/deserialize/all-options.md +33 -0
- package/docs/builtin-macros/deserialize/combining-with-serialize.md +27 -0
- package/docs/builtin-macros/deserialize/enum-support.md +31 -0
- package/docs/builtin-macros/deserialize/error-handling.md +24 -0
- package/docs/builtin-macros/deserialize/interface-support.md +18 -0
- package/docs/builtin-macros/deserialize/overview.md +16 -0
- package/docs/builtin-macros/deserialize/runtime-validation.md +51 -0
- package/docs/builtin-macros/deserialize/serde-options.md +83 -0
- package/docs/builtin-macros/deserialize/type-alias-support.md +26 -0
- package/docs/custom-macros/rust-setup.md +6 -6
- package/docs/custom-macros/ts-macro-derive/accessing-field-data.md +53 -0
- package/docs/custom-macros/ts-macro-derive/adding-imports.md +21 -0
- package/docs/custom-macros/ts-macro-derive/attribute-options.md +50 -0
- package/docs/custom-macros/ts-macro-derive/complete-example.md +51 -0
- package/docs/custom-macros/ts-macro-derive/deriveinput-structure.md +61 -0
- package/docs/custom-macros/ts-macro-derive/overview.md +15 -0
- package/docs/custom-macros/ts-macro-derive/parsing-input.md +27 -0
- package/docs/custom-macros/ts-macro-derive/returning-errors.md +21 -0
- package/docs/custom-macros/ts-quote/backtick-template-literals.md +29 -0
- package/docs/custom-macros/ts-quote/comments-and.md +66 -0
- package/docs/custom-macros/ts-quote/complete-example-json-derive-macro.md +131 -0
- package/docs/custom-macros/ts-quote/conditionals-ifif.md +46 -0
- package/docs/custom-macros/ts-quote/identifier-concatenation-content.md +42 -0
- package/docs/custom-macros/ts-quote/iteration-for.md +60 -0
- package/docs/custom-macros/ts-quote/match-expressions-match.md +58 -0
- package/docs/custom-macros/ts-quote/overview.md +13 -0
- package/docs/custom-macros/ts-quote/pattern-matching-if-let.md +33 -0
- package/docs/custom-macros/ts-quote/quick-reference.md +83 -0
- package/docs/custom-macros/ts-quote/side-effects-do.md +23 -0
- package/docs/custom-macros/ts-quote/string-interpolation-text-expr.md +30 -0
- package/docs/custom-macros/ts-quote/tsstream-injection-typescript.md +61 -0
- package/docs/custom-macros/ts-quote/while-loops-while.md +81 -0
- package/docs/sections.json +322 -3
- package/package.json +2 -2
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
## Pattern Matching: `{#if let}`
|
|
2
|
+
|
|
3
|
+
Use `if let` for pattern matching on `Option`, `Result`, or other Rust enums:
|
|
4
|
+
|
|
5
|
+
```rust
|
|
6
|
+
let maybe_name: Option<&str> = Some("Alice");
|
|
7
|
+
|
|
8
|
+
let code = ts_template! {
|
|
9
|
+
{#if let Some(name) = maybe_name}
|
|
10
|
+
console.log("Hello, @{name}!");
|
|
11
|
+
{:else}
|
|
12
|
+
console.log("Hello, anonymous!");
|
|
13
|
+
{/if}
|
|
14
|
+
};
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Generates:**
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
console.log("Hello, Alice!");
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This is useful when working with optional values from your IR:
|
|
24
|
+
|
|
25
|
+
```rust
|
|
26
|
+
let code = ts_template! {
|
|
27
|
+
{#if let Some(default_val) = field.default_value}
|
|
28
|
+
this.@{field.name} = @{default_val};
|
|
29
|
+
{:else}
|
|
30
|
+
this.@{field.name} = undefined;
|
|
31
|
+
{/if}
|
|
32
|
+
};
|
|
33
|
+
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
## Quick Reference
|
|
2
|
+
|
|
3
|
+
| `@{expr}`
|
|
4
|
+
| Interpolate a Rust expression (adds space after)
|
|
5
|
+
|
|
6
|
+
| `{| content |}`
|
|
7
|
+
| Ident block: concatenates without spaces (e.g., `{|get@{name}|}` → `getUser`)
|
|
8
|
+
|
|
9
|
+
| `{> comment <}`
|
|
10
|
+
| Block comment: outputs `/* comment */`
|
|
11
|
+
|
|
12
|
+
| `{>> doc <<}`
|
|
13
|
+
| Doc comment: outputs `/** doc */` (for JSDoc)
|
|
14
|
+
|
|
15
|
+
| `@@{`
|
|
16
|
+
| Escape for literal `@{` (e.g., `"@@{foo}"` → `@{foo}`)
|
|
17
|
+
|
|
18
|
+
| `"text @{expr}"`
|
|
19
|
+
| String interpolation (auto-detected)
|
|
20
|
+
|
|
21
|
+
| `"'^template ${js}^'"`
|
|
22
|
+
| JS backtick template literal (outputs ``template ${js}``)
|
|
23
|
+
|
|
24
|
+
| `{#if cond}...{/if}`
|
|
25
|
+
| Conditional block
|
|
26
|
+
|
|
27
|
+
| `{#if cond}...{:else}...{/if}`
|
|
28
|
+
| Conditional with else
|
|
29
|
+
|
|
30
|
+
| `{#if a}...{:else if b}...{:else}...{/if}`
|
|
31
|
+
| Full if/else-if/else chain
|
|
32
|
+
|
|
33
|
+
| `{#if let pattern = expr}...{/if}`
|
|
34
|
+
| Pattern matching if-let
|
|
35
|
+
|
|
36
|
+
| `{#match expr}{:case pattern}...{/match}`
|
|
37
|
+
| Match expression with case arms
|
|
38
|
+
|
|
39
|
+
| `{#for item in list}...{/for}`
|
|
40
|
+
| Iterate over a collection
|
|
41
|
+
|
|
42
|
+
| `{#while cond}...{/while}`
|
|
43
|
+
| While loop
|
|
44
|
+
|
|
45
|
+
| `{#while let pattern = expr}...{/while}`
|
|
46
|
+
| While-let pattern matching loop
|
|
47
|
+
|
|
48
|
+
| `{$let name = expr}`
|
|
49
|
+
| Define a local constant
|
|
50
|
+
|
|
51
|
+
| `{$let mut name = expr}`
|
|
52
|
+
| Define a mutable local variable
|
|
53
|
+
|
|
54
|
+
| `{$do expr}`
|
|
55
|
+
| Execute a side-effectful expression
|
|
56
|
+
|
|
57
|
+
| `{$typescript stream}`
|
|
58
|
+
| Inject a TsStream, preserving its source and runtime_patches (imports)
|
|
59
|
+
|
|
60
|
+
**Note:** A single `@` not followed by `{` passes through unchanged (e.g., `email@domain.com` works as expected).
|
|
61
|
+
|
|
62
|
+
## Interpolation: `@{expr}`
|
|
63
|
+
|
|
64
|
+
Insert Rust expressions into the generated TypeScript:
|
|
65
|
+
|
|
66
|
+
```rust
|
|
67
|
+
let class_name = "User";
|
|
68
|
+
let method = "toString";
|
|
69
|
+
|
|
70
|
+
let code = ts_template! {
|
|
71
|
+
@{class_name}.prototype.@{method} = function() {
|
|
72
|
+
return "User instance";
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Generates:**
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
User.prototype.toString = function () {
|
|
81
|
+
return "User instance";
|
|
82
|
+
};
|
|
83
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## Side Effects: `{$do}`
|
|
2
|
+
|
|
3
|
+
Execute an expression for its side effects without producing output. This is commonly used with mutable variables:
|
|
4
|
+
|
|
5
|
+
```rust
|
|
6
|
+
let code = ts_template! {
|
|
7
|
+
{$let mut results: Vec<String> = Vec::new()}
|
|
8
|
+
{#for field in fields}
|
|
9
|
+
{$do results.push(format!("this.{}", field))}
|
|
10
|
+
{/for}
|
|
11
|
+
return [@{results.join(", ")}];
|
|
12
|
+
};
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Common uses for `{$do}`:
|
|
16
|
+
|
|
17
|
+
- Incrementing counters: `{$do i += 1}`
|
|
18
|
+
|
|
19
|
+
- Building collections: `{$do vec.push(item)}`
|
|
20
|
+
|
|
21
|
+
- Setting flags: `{$do found = true}`
|
|
22
|
+
|
|
23
|
+
- Any mutating operation
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## String Interpolation: `"text @{expr}"`
|
|
2
|
+
|
|
3
|
+
Interpolation works automatically inside string literals - no `format!()` needed:
|
|
4
|
+
|
|
5
|
+
```rust
|
|
6
|
+
let name = "World";
|
|
7
|
+
let count = 42;
|
|
8
|
+
|
|
9
|
+
let code = ts_template! {
|
|
10
|
+
console.log("Hello @{name}!");
|
|
11
|
+
console.log("Count: @{count}, doubled: @{count * 2}");
|
|
12
|
+
};
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Generates:**
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
console.log("Hello World!");
|
|
19
|
+
console.log("Count: 42, doubled: 84");
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
This also works with method calls and complex expressions:
|
|
23
|
+
|
|
24
|
+
```rust
|
|
25
|
+
let field = "username";
|
|
26
|
+
|
|
27
|
+
let code = ts_template! {
|
|
28
|
+
throw new Error("Invalid @{field.to_uppercase()}");
|
|
29
|
+
};
|
|
30
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
## TsStream Injection: `{$typescript}`
|
|
2
|
+
|
|
3
|
+
Inject another TsStream into your template, preserving both its source code and runtime patches (like imports added via `add_import()`):
|
|
4
|
+
|
|
5
|
+
```rust
|
|
6
|
+
// Create a helper method with its own import
|
|
7
|
+
let mut helper = body! {
|
|
8
|
+
validateEmail(email: string): boolean {
|
|
9
|
+
return Result.ok(true);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
helper.add_import("Result", "macroforge/result");
|
|
13
|
+
|
|
14
|
+
// Inject the helper into the main template
|
|
15
|
+
let result = body! {
|
|
16
|
+
{$typescript helper}
|
|
17
|
+
|
|
18
|
+
process(data: Record<string, unknown>): void {
|
|
19
|
+
// ...
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
// result now includes helper's source AND its Result import
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
This is essential for composing multiple macro outputs while preserving imports and patches:
|
|
26
|
+
|
|
27
|
+
```rust
|
|
28
|
+
let extra_methods = if include_validation {
|
|
29
|
+
Some(body! {
|
|
30
|
+
validate(): boolean { return true; }
|
|
31
|
+
})
|
|
32
|
+
} else {
|
|
33
|
+
None
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
body! {
|
|
37
|
+
mainMethod(): void {}
|
|
38
|
+
|
|
39
|
+
{#if let Some(methods) = extra_methods}
|
|
40
|
+
{$typescript methods}
|
|
41
|
+
{/if}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Escape Syntax
|
|
46
|
+
|
|
47
|
+
If you need a literal `@{` in your output (not interpolation), use `@@{`:
|
|
48
|
+
|
|
49
|
+
```rust
|
|
50
|
+
ts_template! {
|
|
51
|
+
// This outputs a literal @{foo}
|
|
52
|
+
const example = "Use @@{foo} for templates";
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Generates:**
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
// This outputs a literal @{foo}
|
|
60
|
+
const example = "Use @{foo} for templates";
|
|
61
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
## While Loops: `{#while}`
|
|
2
|
+
|
|
3
|
+
Use `while` for loops that need to continue until a condition is false:
|
|
4
|
+
|
|
5
|
+
```rust
|
|
6
|
+
let items = get_items();
|
|
7
|
+
let mut idx = 0;
|
|
8
|
+
|
|
9
|
+
let code = ts_template! {
|
|
10
|
+
{$let mut i = 0}
|
|
11
|
+
{#while i < items.len()}
|
|
12
|
+
console.log("Item @{i}");
|
|
13
|
+
{$do i += 1}
|
|
14
|
+
{/while}
|
|
15
|
+
};
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### While-Let Pattern Matching
|
|
19
|
+
|
|
20
|
+
Use `while let` for iterating with pattern matching, similar to `if let`:
|
|
21
|
+
|
|
22
|
+
```rust
|
|
23
|
+
let mut items = vec!["a", "b", "c"].into_iter();
|
|
24
|
+
|
|
25
|
+
let code = ts_template! {
|
|
26
|
+
{#while let Some(item) = items.next()}
|
|
27
|
+
console.log("@{item}");
|
|
28
|
+
{/while}
|
|
29
|
+
};
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Generates:**
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
console.log("a");
|
|
36
|
+
console.log("b");
|
|
37
|
+
console.log("c");
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This is especially useful when working with iterators or consuming optional values:
|
|
41
|
+
|
|
42
|
+
```rust
|
|
43
|
+
let code = ts_template! {
|
|
44
|
+
{#while let Some(next_field) = remaining_fields.pop()}
|
|
45
|
+
result.@{next_field.name} = this.@{next_field.name};
|
|
46
|
+
{/while}
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Local Constants: `{$let}`
|
|
51
|
+
|
|
52
|
+
Define local variables within the template scope:
|
|
53
|
+
|
|
54
|
+
```rust
|
|
55
|
+
let items = vec![("user", "User"), ("post", "Post")];
|
|
56
|
+
|
|
57
|
+
let code = ts_template! {
|
|
58
|
+
{#for (key, class_name) in items}
|
|
59
|
+
{$let upper = class_name.to_uppercase()}
|
|
60
|
+
console.log("Processing @{upper}");
|
|
61
|
+
const @{key} = new @{class_name}();
|
|
62
|
+
{/for}
|
|
63
|
+
};
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This is useful for computing derived values inside loops without cluttering the Rust code.
|
|
67
|
+
|
|
68
|
+
## Mutable Variables: `{$let mut}`
|
|
69
|
+
|
|
70
|
+
When you need to modify a variable within the template (e.g., in a `while` loop), use `{$let mut}`:
|
|
71
|
+
|
|
72
|
+
```rust
|
|
73
|
+
let code = ts_template! {
|
|
74
|
+
{$let mut count = 0}
|
|
75
|
+
{#for item in items}
|
|
76
|
+
console.log("Item @{count}: @{item}");
|
|
77
|
+
{$do count += 1}
|
|
78
|
+
{/for}
|
|
79
|
+
console.log("Total: @{count}");
|
|
80
|
+
};
|
|
81
|
+
```
|
package/docs/sections.json
CHANGED
|
@@ -111,13 +111,106 @@
|
|
|
111
111
|
"path": "builtin-macros/serialize.md",
|
|
112
112
|
"use_cases": "toJSON, serialization, json, api, data transfer"
|
|
113
113
|
},
|
|
114
|
+
{
|
|
115
|
+
"id": "deserialize/overview",
|
|
116
|
+
"title": "Deserialize: Overview",
|
|
117
|
+
"category": "builtin-macros",
|
|
118
|
+
"category_title": "Built-in Macros",
|
|
119
|
+
"path": "builtin-macros/deserialize/overview.md",
|
|
120
|
+
"use_cases": "fromJSON, deserialization, deserialize, fromjson()",
|
|
121
|
+
"parent_id": "deserialize"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "deserialize/runtime-validation",
|
|
125
|
+
"title": "Deserialize: Runtime Validation",
|
|
126
|
+
"category": "builtin-macros",
|
|
127
|
+
"category_title": "Built-in Macros",
|
|
128
|
+
"path": "builtin-macros/deserialize/runtime-validation.md",
|
|
129
|
+
"use_cases": "fromJSON, deserialization",
|
|
130
|
+
"parent_id": "deserialize"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "deserialize/serde-options",
|
|
134
|
+
"title": "Deserialize: Serde Options",
|
|
135
|
+
"category": "builtin-macros",
|
|
136
|
+
"category_title": "Built-in Macros",
|
|
137
|
+
"path": "builtin-macros/deserialize/serde-options.md",
|
|
138
|
+
"use_cases": "fromJSON, deserialization, @serde",
|
|
139
|
+
"parent_id": "deserialize"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "deserialize/all-options",
|
|
143
|
+
"title": "Deserialize: All Options",
|
|
144
|
+
"category": "builtin-macros",
|
|
145
|
+
"category_title": "Built-in Macros",
|
|
146
|
+
"path": "builtin-macros/deserialize/all-options.md",
|
|
147
|
+
"use_cases": "fromJSON, deserialization, rename_all, string, deny_unknown_fields, boolean",
|
|
148
|
+
"parent_id": "deserialize"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "deserialize/interface-support",
|
|
152
|
+
"title": "Deserialize: Interface Support",
|
|
153
|
+
"category": "builtin-macros",
|
|
154
|
+
"category_title": "Built-in Macros",
|
|
155
|
+
"path": "builtin-macros/deserialize/interface-support.md",
|
|
156
|
+
"use_cases": "fromJSON, deserialization, fromjson",
|
|
157
|
+
"parent_id": "deserialize"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"id": "deserialize/enum-support",
|
|
161
|
+
"title": "Deserialize: Enum Support",
|
|
162
|
+
"category": "builtin-macros",
|
|
163
|
+
"category_title": "Built-in Macros",
|
|
164
|
+
"path": "builtin-macros/deserialize/enum-support.md",
|
|
165
|
+
"use_cases": "fromJSON, deserialization, fromjson",
|
|
166
|
+
"parent_id": "deserialize"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"id": "deserialize/type-alias-support",
|
|
170
|
+
"title": "Deserialize: Type Alias Support",
|
|
171
|
+
"category": "builtin-macros",
|
|
172
|
+
"category_title": "Built-in Macros",
|
|
173
|
+
"path": "builtin-macros/deserialize/type-alias-support.md",
|
|
174
|
+
"use_cases": "fromJSON, deserialization",
|
|
175
|
+
"parent_id": "deserialize"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "deserialize/combining-with-serialize",
|
|
179
|
+
"title": "Deserialize: Combining with Serialize",
|
|
180
|
+
"category": "builtin-macros",
|
|
181
|
+
"category_title": "Built-in Macros",
|
|
182
|
+
"path": "builtin-macros/deserialize/combining-with-serialize.md",
|
|
183
|
+
"use_cases": "fromJSON, deserialization",
|
|
184
|
+
"parent_id": "deserialize"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "deserialize/error-handling",
|
|
188
|
+
"title": "Deserialize: Error Handling",
|
|
189
|
+
"category": "builtin-macros",
|
|
190
|
+
"category_title": "Built-in Macros",
|
|
191
|
+
"path": "builtin-macros/deserialize/error-handling.md",
|
|
192
|
+
"use_cases": "fromJSON, deserialization",
|
|
193
|
+
"parent_id": "deserialize"
|
|
194
|
+
},
|
|
114
195
|
{
|
|
115
196
|
"id": "deserialize",
|
|
116
197
|
"title": "Deserialize",
|
|
117
198
|
"category": "builtin-macros",
|
|
118
199
|
"category_title": "Built-in Macros",
|
|
119
200
|
"path": "builtin-macros/deserialize.md",
|
|
120
|
-
"use_cases": "fromJSON, deserialization, parsing, validation, json"
|
|
201
|
+
"use_cases": "fromJSON, deserialization, parsing, validation, json",
|
|
202
|
+
"is_chunked": true,
|
|
203
|
+
"chunk_ids": [
|
|
204
|
+
"deserialize/overview",
|
|
205
|
+
"deserialize/runtime-validation",
|
|
206
|
+
"deserialize/serde-options",
|
|
207
|
+
"deserialize/all-options",
|
|
208
|
+
"deserialize/interface-support",
|
|
209
|
+
"deserialize/enum-support",
|
|
210
|
+
"deserialize/type-alias-support",
|
|
211
|
+
"deserialize/combining-with-serialize",
|
|
212
|
+
"deserialize/error-handling"
|
|
213
|
+
]
|
|
121
214
|
},
|
|
122
215
|
{
|
|
123
216
|
"id": "custom-overview",
|
|
@@ -135,13 +228,222 @@
|
|
|
135
228
|
"path": "custom-macros/rust-setup.md",
|
|
136
229
|
"use_cases": "rust, cargo, napi, compilation, building"
|
|
137
230
|
},
|
|
231
|
+
{
|
|
232
|
+
"id": "ts-macro-derive/overview",
|
|
233
|
+
"title": "#[ts_macro_derive]: Overview",
|
|
234
|
+
"category": "custom-macros",
|
|
235
|
+
"category_title": "Custom Macros",
|
|
236
|
+
"path": "custom-macros/ts-macro-derive/overview.md",
|
|
237
|
+
"use_cases": "attribute, proc macro, #[ts_macro_derive]",
|
|
238
|
+
"parent_id": "ts-macro-derive"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"id": "ts-macro-derive/attribute-options",
|
|
242
|
+
"title": "#[ts_macro_derive]: Attribute Options",
|
|
243
|
+
"category": "custom-macros",
|
|
244
|
+
"category_title": "Custom Macros",
|
|
245
|
+
"path": "custom-macros/ts-macro-derive/attribute-options.md",
|
|
246
|
+
"use_cases": "attribute, proc macro, @derive()",
|
|
247
|
+
"parent_id": "ts-macro-derive"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"id": "ts-macro-derive/parsing-input",
|
|
251
|
+
"title": "#[ts_macro_derive]: Parsing Input",
|
|
252
|
+
"category": "custom-macros",
|
|
253
|
+
"category_title": "Custom Macros",
|
|
254
|
+
"path": "custom-macros/ts-macro-derive/parsing-input.md",
|
|
255
|
+
"use_cases": "attribute, proc macro, parse_ts_macro_input!",
|
|
256
|
+
"parent_id": "ts-macro-derive"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"id": "ts-macro-derive/deriveinput-structure",
|
|
260
|
+
"title": "#[ts_macro_derive]: DeriveInput Structure",
|
|
261
|
+
"category": "custom-macros",
|
|
262
|
+
"category_title": "Custom Macros",
|
|
263
|
+
"path": "custom-macros/ts-macro-derive/deriveinput-structure.md",
|
|
264
|
+
"use_cases": "attribute, proc macro",
|
|
265
|
+
"parent_id": "ts-macro-derive"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"id": "ts-macro-derive/accessing-field-data",
|
|
269
|
+
"title": "#[ts_macro_derive]: Accessing Field Data",
|
|
270
|
+
"category": "custom-macros",
|
|
271
|
+
"category_title": "Custom Macros",
|
|
272
|
+
"path": "custom-macros/ts-macro-derive/accessing-field-data.md",
|
|
273
|
+
"use_cases": "attribute, proc macro",
|
|
274
|
+
"parent_id": "ts-macro-derive"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"id": "ts-macro-derive/adding-imports",
|
|
278
|
+
"title": "#[ts_macro_derive]: Adding Imports",
|
|
279
|
+
"category": "custom-macros",
|
|
280
|
+
"category_title": "Custom Macros",
|
|
281
|
+
"path": "custom-macros/ts-macro-derive/adding-imports.md",
|
|
282
|
+
"use_cases": "attribute, proc macro, add_import, tsstream",
|
|
283
|
+
"parent_id": "ts-macro-derive"
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"id": "ts-macro-derive/returning-errors",
|
|
287
|
+
"title": "#[ts_macro_derive]: Returning Errors",
|
|
288
|
+
"category": "custom-macros",
|
|
289
|
+
"category_title": "Custom Macros",
|
|
290
|
+
"path": "custom-macros/ts-macro-derive/returning-errors.md",
|
|
291
|
+
"use_cases": "attribute, proc macro, macroforgeerror",
|
|
292
|
+
"parent_id": "ts-macro-derive"
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"id": "ts-macro-derive/complete-example",
|
|
296
|
+
"title": "#[ts_macro_derive]: Complete Example",
|
|
297
|
+
"category": "custom-macros",
|
|
298
|
+
"category_title": "Custom Macros",
|
|
299
|
+
"path": "custom-macros/ts-macro-derive/complete-example.md",
|
|
300
|
+
"use_cases": "attribute, proc macro",
|
|
301
|
+
"parent_id": "ts-macro-derive"
|
|
302
|
+
},
|
|
138
303
|
{
|
|
139
304
|
"id": "ts-macro-derive",
|
|
140
305
|
"title": "#[ts_macro_derive]",
|
|
141
306
|
"category": "custom-macros",
|
|
142
307
|
"category_title": "Custom Macros",
|
|
143
308
|
"path": "custom-macros/ts-macro-derive.md",
|
|
144
|
-
"use_cases": "attribute, proc macro, derive attribute, rust macro"
|
|
309
|
+
"use_cases": "attribute, proc macro, derive attribute, rust macro",
|
|
310
|
+
"is_chunked": true,
|
|
311
|
+
"chunk_ids": [
|
|
312
|
+
"ts-macro-derive/overview",
|
|
313
|
+
"ts-macro-derive/attribute-options",
|
|
314
|
+
"ts-macro-derive/parsing-input",
|
|
315
|
+
"ts-macro-derive/deriveinput-structure",
|
|
316
|
+
"ts-macro-derive/accessing-field-data",
|
|
317
|
+
"ts-macro-derive/adding-imports",
|
|
318
|
+
"ts-macro-derive/returning-errors",
|
|
319
|
+
"ts-macro-derive/complete-example"
|
|
320
|
+
]
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"id": "ts-quote/overview",
|
|
324
|
+
"title": "Template Syntax: Overview",
|
|
325
|
+
"category": "custom-macros",
|
|
326
|
+
"category_title": "Custom Macros",
|
|
327
|
+
"path": "custom-macros/ts-quote/overview.md",
|
|
328
|
+
"use_cases": "ts_quote, template, macroforge_ts_quote, ts_template!, body!",
|
|
329
|
+
"parent_id": "ts-quote"
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"id": "ts-quote/quick-reference",
|
|
333
|
+
"title": "Template Syntax: Quick Reference",
|
|
334
|
+
"category": "custom-macros",
|
|
335
|
+
"category_title": "Custom Macros",
|
|
336
|
+
"path": "custom-macros/ts-quote/quick-reference.md",
|
|
337
|
+
"use_cases": "ts_quote, template, @{expr}, getuser",
|
|
338
|
+
"parent_id": "ts-quote"
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "ts-quote/identifier-concatenation-content",
|
|
342
|
+
"title": "Template Syntax: Identifier Concatenation: `{| content |}`",
|
|
343
|
+
"category": "custom-macros",
|
|
344
|
+
"category_title": "Custom Macros",
|
|
345
|
+
"path": "custom-macros/ts-quote/identifier-concatenation-content.md",
|
|
346
|
+
"use_cases": "ts_quote, template, getuser, setname",
|
|
347
|
+
"parent_id": "ts-quote"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"id": "ts-quote/comments-and",
|
|
351
|
+
"title": "Template Syntax: Comments: `{> ... <}` and `{>> ... <<}`",
|
|
352
|
+
"category": "custom-macros",
|
|
353
|
+
"category_title": "Custom Macros",
|
|
354
|
+
"path": "custom-macros/ts-quote/comments-and.md",
|
|
355
|
+
"use_cases": "ts_quote, template, \n\n**generates:**\n\n",
|
|
356
|
+
"parent_id": "ts-quote"
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"id": "ts-quote/string-interpolation-text-expr",
|
|
360
|
+
"title": "Template Syntax: String Interpolation: `\"text @{expr}\"`",
|
|
361
|
+
"category": "custom-macros",
|
|
362
|
+
"category_title": "Custom Macros",
|
|
363
|
+
"path": "custom-macros/ts-quote/string-interpolation-text-expr.md",
|
|
364
|
+
"use_cases": "ts_quote, template, format!(), \n\n**generates:**\n\n",
|
|
365
|
+
"parent_id": "ts-quote"
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"id": "ts-quote/backtick-template-literals",
|
|
369
|
+
"title": "Template Syntax: Backtick Template Literals: `\"'^...^'\"`",
|
|
370
|
+
"category": "custom-macros",
|
|
371
|
+
"category_title": "Custom Macros",
|
|
372
|
+
"path": "custom-macros/ts-quote/backtick-template-literals.md",
|
|
373
|
+
"use_cases": "ts_quote, template, \"'^...^'\", '^...^', ${\"${}\"}",
|
|
374
|
+
"parent_id": "ts-quote"
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"id": "ts-quote/conditionals-ifif",
|
|
378
|
+
"title": "Template Syntax: Conditionals: `{#if}...{/if}`",
|
|
379
|
+
"category": "custom-macros",
|
|
380
|
+
"category_title": "Custom Macros",
|
|
381
|
+
"path": "custom-macros/ts-quote/conditionals-ifif.md",
|
|
382
|
+
"use_cases": "ts_quote, template",
|
|
383
|
+
"parent_id": "ts-quote"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"id": "ts-quote/pattern-matching-if-let",
|
|
387
|
+
"title": "Template Syntax: Pattern Matching: `{#if let}`",
|
|
388
|
+
"category": "custom-macros",
|
|
389
|
+
"category_title": "Custom Macros",
|
|
390
|
+
"path": "custom-macros/ts-quote/pattern-matching-if-let.md",
|
|
391
|
+
"use_cases": "ts_quote, template, option, result",
|
|
392
|
+
"parent_id": "ts-quote"
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"id": "ts-quote/match-expressions-match",
|
|
396
|
+
"title": "Template Syntax: Match Expressions: `{#match}`",
|
|
397
|
+
"category": "custom-macros",
|
|
398
|
+
"category_title": "Custom Macros",
|
|
399
|
+
"path": "custom-macros/ts-quote/match-expressions-match.md",
|
|
400
|
+
"use_cases": "ts_quote, template, {#match}, match, \n\n**generates:**\n\n",
|
|
401
|
+
"parent_id": "ts-quote"
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"id": "ts-quote/iteration-for",
|
|
405
|
+
"title": "Template Syntax: Iteration: `{#for}`",
|
|
406
|
+
"category": "custom-macros",
|
|
407
|
+
"category_title": "Custom Macros",
|
|
408
|
+
"path": "custom-macros/ts-quote/iteration-for.md",
|
|
409
|
+
"use_cases": "ts_quote, template, {#for}, \n\n**generates:**\n\n",
|
|
410
|
+
"parent_id": "ts-quote"
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"id": "ts-quote/while-loops-while",
|
|
414
|
+
"title": "Template Syntax: While Loops: `{#while}`",
|
|
415
|
+
"category": "custom-macros",
|
|
416
|
+
"category_title": "Custom Macros",
|
|
417
|
+
"path": "custom-macros/ts-quote/while-loops-while.md",
|
|
418
|
+
"use_cases": "ts_quote, template, {#while}, while",
|
|
419
|
+
"parent_id": "ts-quote"
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"id": "ts-quote/side-effects-do",
|
|
423
|
+
"title": "Template Syntax: Side Effects: `{$do}`",
|
|
424
|
+
"category": "custom-macros",
|
|
425
|
+
"category_title": "Custom Macros",
|
|
426
|
+
"path": "custom-macros/ts-quote/side-effects-do.md",
|
|
427
|
+
"use_cases": "ts_quote, template, {$do}",
|
|
428
|
+
"parent_id": "ts-quote"
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"id": "ts-quote/tsstream-injection-typescript",
|
|
432
|
+
"title": "Template Syntax: TsStream Injection: `{$typescript}`",
|
|
433
|
+
"category": "custom-macros",
|
|
434
|
+
"category_title": "Custom Macros",
|
|
435
|
+
"path": "custom-macros/ts-quote/tsstream-injection-typescript.md",
|
|
436
|
+
"use_cases": "ts_quote, template, {$typescript}, add_import()",
|
|
437
|
+
"parent_id": "ts-quote"
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"id": "ts-quote/complete-example-json-derive-macro",
|
|
441
|
+
"title": "Template Syntax: Complete Example: JSON Derive Macro",
|
|
442
|
+
"category": "custom-macros",
|
|
443
|
+
"category_title": "Custom Macros",
|
|
444
|
+
"path": "custom-macros/ts-quote/complete-example-json-derive-macro.md",
|
|
445
|
+
"use_cases": "ts_quote, template, ts_template!",
|
|
446
|
+
"parent_id": "ts-quote"
|
|
145
447
|
},
|
|
146
448
|
{
|
|
147
449
|
"id": "ts-quote",
|
|
@@ -149,7 +451,24 @@
|
|
|
149
451
|
"category": "custom-macros",
|
|
150
452
|
"category_title": "Custom Macros",
|
|
151
453
|
"path": "custom-macros/ts-quote.md",
|
|
152
|
-
"use_cases": "ts_quote, template, code generation, interpolation"
|
|
454
|
+
"use_cases": "ts_quote, template, code generation, interpolation",
|
|
455
|
+
"is_chunked": true,
|
|
456
|
+
"chunk_ids": [
|
|
457
|
+
"ts-quote/overview",
|
|
458
|
+
"ts-quote/quick-reference",
|
|
459
|
+
"ts-quote/identifier-concatenation-content",
|
|
460
|
+
"ts-quote/comments-and",
|
|
461
|
+
"ts-quote/string-interpolation-text-expr",
|
|
462
|
+
"ts-quote/backtick-template-literals",
|
|
463
|
+
"ts-quote/conditionals-ifif",
|
|
464
|
+
"ts-quote/pattern-matching-if-let",
|
|
465
|
+
"ts-quote/match-expressions-match",
|
|
466
|
+
"ts-quote/iteration-for",
|
|
467
|
+
"ts-quote/while-loops-while",
|
|
468
|
+
"ts-quote/side-effects-do",
|
|
469
|
+
"ts-quote/tsstream-injection-typescript",
|
|
470
|
+
"ts-quote/complete-example-json-derive-macro"
|
|
471
|
+
]
|
|
153
472
|
},
|
|
154
473
|
{
|
|
155
474
|
"id": "integration-overview",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@macroforge/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.26",
|
|
4
4
|
"description": "MCP server for Macroforge documentation and code analysis",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"typescript": "^5.7.0"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"macroforge": "^0.1.
|
|
30
|
+
"macroforge": "^0.1.26"
|
|
31
31
|
},
|
|
32
32
|
"peerDependenciesMeta": {
|
|
33
33
|
"macroforge": {
|