@shuji-bonji/rfcxml-mcp 0.3.0 → 0.4.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.
- package/README.ja.md +39 -33
- package/README.md +37 -29
- package/dist/config.d.ts +26 -26
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +28 -25
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +30 -5
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +49 -7
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +18 -17
- package/dist/index.js.map +1 -1
- package/dist/services/checklist-generator.d.ts +43 -0
- package/dist/services/checklist-generator.d.ts.map +1 -0
- package/dist/services/checklist-generator.js +107 -0
- package/dist/services/checklist-generator.js.map +1 -0
- package/dist/services/rfc-fetcher.d.ts +11 -11
- package/dist/services/rfc-fetcher.d.ts.map +1 -1
- package/dist/services/rfc-fetcher.js +37 -31
- package/dist/services/rfc-fetcher.js.map +1 -1
- package/dist/services/rfc-text-parser.d.ts +4 -6
- package/dist/services/rfc-text-parser.d.ts.map +1 -1
- package/dist/services/rfc-text-parser.js +9 -40
- package/dist/services/rfc-text-parser.js.map +1 -1
- package/dist/services/rfcxml-parser.d.ts +5 -18
- package/dist/services/rfcxml-parser.d.ts.map +1 -1
- package/dist/services/rfcxml-parser.js +21 -95
- package/dist/services/rfcxml-parser.js.map +1 -1
- package/dist/tools/definitions.d.ts +1 -1
- package/dist/tools/definitions.js +27 -27
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers.d.ts +48 -21
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +72 -156
- package/dist/tools/handlers.js.map +1 -1
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/requirement-extractor.d.ts +24 -0
- package/dist/utils/requirement-extractor.d.ts.map +1 -0
- package/dist/utils/requirement-extractor.js +100 -0
- package/dist/utils/requirement-extractor.js.map +1 -0
- package/dist/utils/section.d.ts +21 -0
- package/dist/utils/section.d.ts.map +1 -0
- package/dist/utils/section.js +53 -0
- package/dist/utils/section.js.map +1 -0
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/text.js +3 -2
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/validation.d.ts +14 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +30 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -29,15 +29,15 @@ RFC 文書を **構造的に理解** するための MCP サーバー。
|
|
|
29
29
|
|
|
30
30
|
## 既存 MCP との違い
|
|
31
31
|
|
|
32
|
-
| 機能
|
|
33
|
-
|
|
34
|
-
| RFC テキスト取得
|
|
35
|
-
| セクション抽出
|
|
36
|
-
| MUST/SHOULD/MAY 抽出 | ❌
|
|
37
|
-
| 条件・例外の構造化
|
|
38
|
-
| RFC 間依存グラフ
|
|
39
|
-
| 定義スコープ管理
|
|
40
|
-
| 実装チェックリスト
|
|
32
|
+
| 機能 | 既存 mcp-rfc | RFCXML MCP |
|
|
33
|
+
| -------------------- | ------------------- | --------------- |
|
|
34
|
+
| RFC テキスト取得 | ✅ | ✅ |
|
|
35
|
+
| セクション抽出 | ✅ (テキストベース) | ✅ (構造ベース) |
|
|
36
|
+
| MUST/SHOULD/MAY 抽出 | ❌ | ✅ |
|
|
37
|
+
| 条件・例外の構造化 | ❌ | ✅ |
|
|
38
|
+
| RFC 間依存グラフ | ❌ | ✅ |
|
|
39
|
+
| 定義スコープ管理 | ❌ | ✅ |
|
|
40
|
+
| 実装チェックリスト | ❌ | ✅ |
|
|
41
41
|
|
|
42
42
|
## クイックスタート
|
|
43
43
|
|
|
@@ -57,6 +57,7 @@ MCP 設定ファイルに以下を追加:
|
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
設定ファイルの場所:
|
|
60
|
+
|
|
60
61
|
- **Claude Desktop (macOS)**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
61
62
|
- **Claude Desktop (Windows)**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
62
63
|
- **Claude Code**: `.claude/settings.json` または `claude settings` コマンド
|
|
@@ -111,20 +112,22 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
|
|
|
111
112
|
"rfc": 6455,
|
|
112
113
|
"sections": [...],
|
|
113
114
|
"_source": "text",
|
|
114
|
-
"_sourceNote": "
|
|
115
|
+
"_sourceNote": "Warning: Parsed from text format. Accuracy may be limited."
|
|
115
116
|
}
|
|
116
117
|
```
|
|
117
118
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
| `
|
|
121
|
-
|
|
|
119
|
+
> **Note**: v0.4.0 以降、すべてのメッセージは英語で出力されます(国際化対応)。
|
|
120
|
+
|
|
121
|
+
| `_source` | 説明 |
|
|
122
|
+
| --------- | -------------------------- |
|
|
123
|
+
| `xml` | RFCXML から解析(高精度) |
|
|
124
|
+
| `text` | テキストから解析(中精度) |
|
|
122
125
|
|
|
123
126
|
### 対応状況
|
|
124
127
|
|
|
125
|
-
| RFC
|
|
126
|
-
|
|
127
|
-
| RFC 8650 以降 | XML
|
|
128
|
+
| RFC | 形式 | 備考 |
|
|
129
|
+
| ------------- | -------- | ------------------ |
|
|
130
|
+
| RFC 8650 以降 | XML | RFCXML v3 公式対応 |
|
|
128
131
|
| RFC 8650 未満 | テキスト | 自動フォールバック |
|
|
129
132
|
|
|
130
133
|
## 出力サンプル
|
|
@@ -211,20 +214,22 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
|
|
|
211
214
|
|
|
212
215
|
### `generate_checklist` - 実装チェックリスト生成
|
|
213
216
|
|
|
217
|
+
> **Note**: v0.4.0 以降、チェックリストは英語で出力されます。
|
|
218
|
+
|
|
214
219
|
```markdown
|
|
215
|
-
# RFC 9293
|
|
220
|
+
# RFC 9293 Implementation Checklist
|
|
216
221
|
|
|
217
222
|
**Transmission Control Protocol (TCP)**
|
|
218
223
|
|
|
219
|
-
|
|
224
|
+
Role: client
|
|
220
225
|
|
|
221
|
-
##
|
|
226
|
+
## Mandatory Requirements (MUST / REQUIRED / SHALL)
|
|
222
227
|
|
|
223
228
|
- [ ] A TCP implementation support simultaneous open attempts (MUST-10). (section-3.5)
|
|
224
229
|
- [ ] TCP endpoints implement both sending and receiving the MSS Option (MUST-14). (section-3.7.1)
|
|
225
230
|
- [ ] The RTO be computed according to the algorithm in, including Karn's algorithm (MUST-18). (section-3.8.1)
|
|
226
231
|
|
|
227
|
-
##
|
|
232
|
+
## Optional Requirements (MAY / OPTIONAL)
|
|
228
233
|
|
|
229
234
|
- [ ] Implementers include "keep-alives" in their TCP implementations (MAY-5). (section-3.8.4)
|
|
230
235
|
```
|
|
@@ -242,7 +247,7 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
|
|
|
242
247
|
{ "number": "5", "title": "Data Framing" }
|
|
243
248
|
],
|
|
244
249
|
"_source": "text",
|
|
245
|
-
"_sourceNote": "
|
|
250
|
+
"_sourceNote": "Warning: Parsed from text format. Accuracy may be limited."
|
|
246
251
|
}
|
|
247
252
|
```
|
|
248
253
|
|
|
@@ -250,13 +255,14 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
|
|
|
250
255
|
|
|
251
256
|
[examples/](./examples/) ディレクトリに `generate_checklist` ツールで生成したチェックリストのサンプルがあります:
|
|
252
257
|
|
|
253
|
-
| RFC
|
|
254
|
-
|
|
255
|
-
| [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket
|
|
256
|
-
| [RFC 9293](./examples/rfc9293-tcp-checklist.md)
|
|
257
|
-
| [RFC 7540](./examples/rfc7540-http2-checklist.md)
|
|
258
|
+
| RFC | プロトコル | ソース |
|
|
259
|
+
| ----------------------------------------------------- | ---------- | -------------------------- |
|
|
260
|
+
| [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket | テキスト(フォールバック) |
|
|
261
|
+
| [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
|
|
262
|
+
| [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | テキスト(フォールバック) |
|
|
258
263
|
|
|
259
264
|
**Claude への依頼例:**
|
|
265
|
+
|
|
260
266
|
```
|
|
261
267
|
RFC 9293 (TCP) の実装チェックリストを生成してください。
|
|
262
268
|
```
|
|
@@ -314,12 +320,12 @@ src/
|
|
|
314
320
|
|
|
315
321
|
LRU(Least Recently Used)キャッシュでメモリ使用量を制限:
|
|
316
322
|
|
|
317
|
-
| キャッシュ
|
|
318
|
-
|
|
319
|
-
| XML キャッシュ
|
|
320
|
-
| Text キャッシュ
|
|
321
|
-
| Metadata キャッシュ | 100
|
|
322
|
-
| Parse キャッシュ
|
|
323
|
+
| キャッシュ | 最大エントリ数 | 内容 |
|
|
324
|
+
| ------------------- | -------------- | -------------- |
|
|
325
|
+
| XML キャッシュ | 20 | 生の RFCXML |
|
|
326
|
+
| Text キャッシュ | 20 | 生のテキスト |
|
|
327
|
+
| Metadata キャッシュ | 100 | RFC メタデータ |
|
|
328
|
+
| Parse キャッシュ | 50 | パース済み構造 |
|
|
323
329
|
|
|
324
330
|
## 開発
|
|
325
331
|
|
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
[](https://nodejs.org/)
|
|
7
7
|
[](https://claude.ai/code)
|
|
8
8
|
|
|
9
|
+
[日本語版 README](README.ja.md)
|
|
10
|
+
|
|
9
11
|
A Model Context Protocol (MCP) server for **structured understanding** of RFC documents.
|
|
10
12
|
|
|
11
13
|
## Purpose
|
|
@@ -33,15 +35,15 @@ Unlike existing text-based RFC MCP servers, this server leverages the semantic s
|
|
|
33
35
|
|
|
34
36
|
## Comparison with Existing MCPs
|
|
35
37
|
|
|
36
|
-
| Feature
|
|
37
|
-
|
|
38
|
-
| RFC text retrieval
|
|
39
|
-
| Section extraction
|
|
40
|
-
| MUST/SHOULD/MAY extraction
|
|
41
|
-
| Condition/exception structuring | ❌
|
|
42
|
-
| RFC dependency graph
|
|
43
|
-
| Definition scope management
|
|
44
|
-
| Implementation checklist
|
|
38
|
+
| Feature | Existing mcp-rfc | RFCXML MCP |
|
|
39
|
+
| ------------------------------- | ---------------- | -------------------- |
|
|
40
|
+
| RFC text retrieval | ✅ | ✅ |
|
|
41
|
+
| Section extraction | ✅ (text-based) | ✅ (structure-based) |
|
|
42
|
+
| MUST/SHOULD/MAY extraction | ❌ | ✅ |
|
|
43
|
+
| Condition/exception structuring | ❌ | ✅ |
|
|
44
|
+
| RFC dependency graph | ❌ | ✅ |
|
|
45
|
+
| Definition scope management | ❌ | ✅ |
|
|
46
|
+
| Implementation checklist | ❌ | ✅ |
|
|
45
47
|
|
|
46
48
|
## Quick Start
|
|
47
49
|
|
|
@@ -61,6 +63,7 @@ Add the following to your MCP configuration file:
|
|
|
61
63
|
```
|
|
62
64
|
|
|
63
65
|
Configuration file locations:
|
|
66
|
+
|
|
64
67
|
- **Claude Desktop (macOS)**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
65
68
|
- **Claude Desktop (Windows)**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
66
69
|
- **Claude Code**: `.claude/settings.json` or use `claude settings` command
|
|
@@ -119,17 +122,17 @@ All responses include source information:
|
|
|
119
122
|
}
|
|
120
123
|
```
|
|
121
124
|
|
|
122
|
-
| `_source` | Description
|
|
123
|
-
|
|
124
|
-
| `xml`
|
|
125
|
-
| `text`
|
|
125
|
+
| `_source` | Description |
|
|
126
|
+
| --------- | ---------------------------------- |
|
|
127
|
+
| `xml` | Parsed from RFCXML (high accuracy) |
|
|
128
|
+
| `text` | Parsed from text (medium accuracy) |
|
|
126
129
|
|
|
127
130
|
### Compatibility
|
|
128
131
|
|
|
129
|
-
| RFC
|
|
130
|
-
|
|
131
|
-
| RFC 8650+
|
|
132
|
-
| Before RFC 8650 | Text
|
|
132
|
+
| RFC | Format | Notes |
|
|
133
|
+
| --------------- | ------ | -------------------------- |
|
|
134
|
+
| RFC 8650+ | XML | Official RFCXML v3 support |
|
|
135
|
+
| Before RFC 8650 | Text | Automatic fallback |
|
|
133
136
|
|
|
134
137
|
## Output Samples
|
|
135
138
|
|
|
@@ -254,13 +257,14 @@ Role: Client
|
|
|
254
257
|
|
|
255
258
|
See the [examples/](./examples/) directory for complete checklist samples:
|
|
256
259
|
|
|
257
|
-
| RFC
|
|
258
|
-
|
|
260
|
+
| RFC | Protocol | Source |
|
|
261
|
+
| ----------------------------------------------------- | --------- | --------------- |
|
|
259
262
|
| [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket | Text (fallback) |
|
|
260
|
-
| [RFC 9293](./examples/rfc9293-tcp-checklist.md)
|
|
261
|
-
| [RFC 7540](./examples/rfc7540-http2-checklist.md)
|
|
263
|
+
| [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
|
|
264
|
+
| [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | Text (fallback) |
|
|
262
265
|
|
|
263
266
|
**Example prompt for Claude:**
|
|
267
|
+
|
|
264
268
|
```
|
|
265
269
|
Generate an implementation checklist for RFC 9293 (TCP).
|
|
266
270
|
```
|
|
@@ -277,7 +281,8 @@ src/
|
|
|
277
281
|
├── services/
|
|
278
282
|
│ ├── rfc-fetcher.ts # RFC fetching (parallel)
|
|
279
283
|
│ ├── rfcxml-parser.ts # RFCXML parser
|
|
280
|
-
│
|
|
284
|
+
│ ├── rfc-text-parser.ts # Text fallback parser
|
|
285
|
+
│ └── checklist-generator.ts # Checklist generation service
|
|
281
286
|
├── tools/
|
|
282
287
|
│ ├── definitions.ts # MCP tool definitions
|
|
283
288
|
│ └── handlers.ts # Tool handlers
|
|
@@ -286,7 +291,10 @@ src/
|
|
|
286
291
|
└── utils/
|
|
287
292
|
├── cache.ts # LRU cache
|
|
288
293
|
├── fetch.ts # Parallel fetch utility
|
|
289
|
-
|
|
294
|
+
├── requirement-extractor.ts # Shared requirement extraction
|
|
295
|
+
├── section.ts # Section search utilities
|
|
296
|
+
├── text.ts # Text processing utility
|
|
297
|
+
└── validation.ts # Input validation
|
|
290
298
|
```
|
|
291
299
|
|
|
292
300
|
### RFC Fetch Optimization
|
|
@@ -318,12 +326,12 @@ Sends parallel requests to multiple sources (RFC Editor, IETF Tools, Datatracker
|
|
|
318
326
|
|
|
319
327
|
LRU (Least Recently Used) cache with memory limits:
|
|
320
328
|
|
|
321
|
-
| Cache
|
|
322
|
-
|
|
323
|
-
| XML Cache
|
|
324
|
-
| Text Cache
|
|
325
|
-
| Metadata Cache | 100
|
|
326
|
-
| Parse Cache
|
|
329
|
+
| Cache | Max Entries | Content |
|
|
330
|
+
| -------------- | ----------- | ---------------- |
|
|
331
|
+
| XML Cache | 20 | Raw RFCXML |
|
|
332
|
+
| Text Cache | 20 | Raw text |
|
|
333
|
+
| Metadata Cache | 100 | RFC metadata |
|
|
334
|
+
| Parse Cache | 50 | Parsed structure |
|
|
327
335
|
|
|
328
336
|
## Development
|
|
329
337
|
|
package/dist/config.d.ts
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Application Configuration
|
|
3
|
+
* Centralized configuration management
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Package information (dynamically loaded from package.json)
|
|
7
7
|
*/
|
|
8
8
|
export declare const PACKAGE_INFO: {
|
|
9
|
-
readonly name:
|
|
10
|
-
readonly version:
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly version: string;
|
|
11
11
|
};
|
|
12
12
|
/**
|
|
13
|
-
* HTTP
|
|
13
|
+
* HTTP request configuration
|
|
14
14
|
*/
|
|
15
15
|
export declare const HTTP_CONFIG: {
|
|
16
|
-
/** User-Agent
|
|
17
|
-
readonly userAgent:
|
|
18
|
-
/**
|
|
16
|
+
/** User-Agent header */
|
|
17
|
+
readonly userAgent: `${string}/${string}`;
|
|
18
|
+
/** Timeout in milliseconds */
|
|
19
19
|
readonly timeout: 30000;
|
|
20
|
-
/**
|
|
20
|
+
/** Maximum retry attempts */
|
|
21
21
|
readonly maxRetries: 3;
|
|
22
22
|
};
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* Cache configuration
|
|
25
25
|
*/
|
|
26
26
|
export declare const CACHE_CONFIG: {
|
|
27
|
-
/** XML
|
|
27
|
+
/** XML raw data cache (smaller since parsed cache is primary) */
|
|
28
28
|
readonly xml: {
|
|
29
29
|
readonly maxSize: 20;
|
|
30
30
|
readonly name: "XMLCache";
|
|
31
31
|
};
|
|
32
|
-
/**
|
|
32
|
+
/** Text raw data cache */
|
|
33
33
|
readonly text: {
|
|
34
34
|
readonly maxSize: 20;
|
|
35
35
|
readonly name: "TextCache";
|
|
36
36
|
};
|
|
37
|
-
/**
|
|
37
|
+
/** Metadata cache (lightweight, so larger) */
|
|
38
38
|
readonly metadata: {
|
|
39
39
|
readonly maxSize: 100;
|
|
40
40
|
readonly name: "MetadataCache";
|
|
41
41
|
};
|
|
42
|
-
/**
|
|
42
|
+
/** Parsed RFC cache (main cache) */
|
|
43
43
|
readonly parsed: {
|
|
44
44
|
readonly maxSize: 50;
|
|
45
45
|
readonly name: "ParseCache";
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
48
|
/**
|
|
49
|
-
* RFC
|
|
49
|
+
* RFC-related configuration
|
|
50
50
|
*/
|
|
51
51
|
export declare const RFC_CONFIG: {
|
|
52
52
|
/**
|
|
53
|
-
* RFCXML v3
|
|
54
|
-
* RFC 8650 (2019
|
|
53
|
+
* Minimum RFC number where RFCXML v3 is reliably available
|
|
54
|
+
* RFC 8650 (December 2019) and later use official RFCXML v3 format
|
|
55
55
|
*/
|
|
56
56
|
readonly xmlAvailableFrom: 8650;
|
|
57
57
|
};
|
|
58
58
|
/**
|
|
59
|
-
* RFC XML
|
|
60
|
-
*
|
|
59
|
+
* RFC XML source URLs
|
|
60
|
+
* Defined in priority order
|
|
61
61
|
*/
|
|
62
62
|
export declare const RFC_XML_SOURCES: {
|
|
63
|
-
/** RFC Editor
|
|
63
|
+
/** RFC Editor official */
|
|
64
64
|
readonly rfcEditor: (num: number) => string;
|
|
65
65
|
/** IETF Tools */
|
|
66
66
|
readonly ietfTools: (num: number) => string;
|
|
@@ -68,11 +68,11 @@ export declare const RFC_XML_SOURCES: {
|
|
|
68
68
|
readonly datatracker: (num: number) => string;
|
|
69
69
|
};
|
|
70
70
|
/**
|
|
71
|
-
* RFC
|
|
72
|
-
*
|
|
71
|
+
* RFC text source URLs
|
|
72
|
+
* Defined in priority order
|
|
73
73
|
*/
|
|
74
74
|
export declare const RFC_TEXT_SOURCES: {
|
|
75
|
-
/** RFC Editor
|
|
75
|
+
/** RFC Editor official (text) */
|
|
76
76
|
readonly rfcEditor: (num: number) => string;
|
|
77
77
|
/** IETF Tools */
|
|
78
78
|
readonly ietfTools: (num: number) => string;
|
|
@@ -81,11 +81,11 @@ export declare const RFC_TEXT_SOURCES: {
|
|
|
81
81
|
* IETF Datatracker API
|
|
82
82
|
*/
|
|
83
83
|
export declare const DATATRACKER_API: {
|
|
84
|
-
/** RFC
|
|
84
|
+
/** RFC document information */
|
|
85
85
|
readonly document: (num: number) => string;
|
|
86
86
|
};
|
|
87
87
|
/**
|
|
88
|
-
* RFC
|
|
88
|
+
* Check if RFC is likely available in XML format
|
|
89
89
|
*/
|
|
90
90
|
export declare function isRFCXMLLikelyAvailable(rfcNumber: number): boolean;
|
|
91
91
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,wBAAwB;;IAExB,8BAA8B;;IAE9B,6BAA6B;;CAErB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,iEAAiE;;;;;IAKjE,0BAA0B;;;;;IAK1B,8CAA8C;;;;;IAK9C,oCAAoC;;;;;CAK5B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB;;;OAGG;;CAEK,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,0BAA0B;8BACT,MAAM;IACvB,iBAAiB;8BACA,MAAM;IACvB,kBAAkB;gCACC,MAAM;CACjB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,gBAAgB;IAC3B,iCAAiC;8BAChB,MAAM;IACvB,iBAAiB;8BACA,MAAM;CACf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B,+BAA+B;6BACf,MAAM;CACd,CAAC;AAEX;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAElE"}
|
package/dist/config.js
CHANGED
|
@@ -1,66 +1,69 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Application Configuration
|
|
3
|
+
* Centralized configuration management
|
|
4
4
|
*/
|
|
5
|
+
import { createRequire } from 'module';
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
const packageJson = require('../package.json');
|
|
5
8
|
/**
|
|
6
|
-
*
|
|
9
|
+
* Package information (dynamically loaded from package.json)
|
|
7
10
|
*/
|
|
8
11
|
export const PACKAGE_INFO = {
|
|
9
|
-
name:
|
|
10
|
-
version:
|
|
12
|
+
name: packageJson.name,
|
|
13
|
+
version: packageJson.version,
|
|
11
14
|
};
|
|
12
15
|
/**
|
|
13
|
-
* HTTP
|
|
16
|
+
* HTTP request configuration
|
|
14
17
|
*/
|
|
15
18
|
export const HTTP_CONFIG = {
|
|
16
|
-
/** User-Agent
|
|
19
|
+
/** User-Agent header */
|
|
17
20
|
userAgent: `${PACKAGE_INFO.name}/${PACKAGE_INFO.version}`,
|
|
18
|
-
/**
|
|
21
|
+
/** Timeout in milliseconds */
|
|
19
22
|
timeout: 30000,
|
|
20
|
-
/**
|
|
23
|
+
/** Maximum retry attempts */
|
|
21
24
|
maxRetries: 3,
|
|
22
25
|
};
|
|
23
26
|
/**
|
|
24
|
-
*
|
|
27
|
+
* Cache configuration
|
|
25
28
|
*/
|
|
26
29
|
export const CACHE_CONFIG = {
|
|
27
|
-
/** XML
|
|
30
|
+
/** XML raw data cache (smaller since parsed cache is primary) */
|
|
28
31
|
xml: {
|
|
29
32
|
maxSize: 20,
|
|
30
33
|
name: 'XMLCache',
|
|
31
34
|
},
|
|
32
|
-
/**
|
|
35
|
+
/** Text raw data cache */
|
|
33
36
|
text: {
|
|
34
37
|
maxSize: 20,
|
|
35
38
|
name: 'TextCache',
|
|
36
39
|
},
|
|
37
|
-
/**
|
|
40
|
+
/** Metadata cache (lightweight, so larger) */
|
|
38
41
|
metadata: {
|
|
39
42
|
maxSize: 100,
|
|
40
43
|
name: 'MetadataCache',
|
|
41
44
|
},
|
|
42
|
-
/**
|
|
45
|
+
/** Parsed RFC cache (main cache) */
|
|
43
46
|
parsed: {
|
|
44
47
|
maxSize: 50,
|
|
45
48
|
name: 'ParseCache',
|
|
46
49
|
},
|
|
47
50
|
};
|
|
48
51
|
/**
|
|
49
|
-
* RFC
|
|
52
|
+
* RFC-related configuration
|
|
50
53
|
*/
|
|
51
54
|
export const RFC_CONFIG = {
|
|
52
55
|
/**
|
|
53
|
-
* RFCXML v3
|
|
54
|
-
* RFC 8650 (2019
|
|
56
|
+
* Minimum RFC number where RFCXML v3 is reliably available
|
|
57
|
+
* RFC 8650 (December 2019) and later use official RFCXML v3 format
|
|
55
58
|
*/
|
|
56
59
|
xmlAvailableFrom: 8650,
|
|
57
60
|
};
|
|
58
61
|
/**
|
|
59
|
-
* RFC XML
|
|
60
|
-
*
|
|
62
|
+
* RFC XML source URLs
|
|
63
|
+
* Defined in priority order
|
|
61
64
|
*/
|
|
62
65
|
export const RFC_XML_SOURCES = {
|
|
63
|
-
/** RFC Editor
|
|
66
|
+
/** RFC Editor official */
|
|
64
67
|
rfcEditor: (num) => `https://www.rfc-editor.org/rfc/rfc${num}.xml`,
|
|
65
68
|
/** IETF Tools */
|
|
66
69
|
ietfTools: (num) => `https://xml2rfc.ietf.org/public/rfc/rfc${num}.xml`,
|
|
@@ -68,11 +71,11 @@ export const RFC_XML_SOURCES = {
|
|
|
68
71
|
datatracker: (num) => `https://datatracker.ietf.org/doc/rfc${num}/xml/`,
|
|
69
72
|
};
|
|
70
73
|
/**
|
|
71
|
-
* RFC
|
|
72
|
-
*
|
|
74
|
+
* RFC text source URLs
|
|
75
|
+
* Defined in priority order
|
|
73
76
|
*/
|
|
74
77
|
export const RFC_TEXT_SOURCES = {
|
|
75
|
-
/** RFC Editor
|
|
78
|
+
/** RFC Editor official (text) */
|
|
76
79
|
rfcEditor: (num) => `https://www.rfc-editor.org/rfc/rfc${num}.txt`,
|
|
77
80
|
/** IETF Tools */
|
|
78
81
|
ietfTools: (num) => `https://tools.ietf.org/rfc/rfc${num}.txt`,
|
|
@@ -81,11 +84,11 @@ export const RFC_TEXT_SOURCES = {
|
|
|
81
84
|
* IETF Datatracker API
|
|
82
85
|
*/
|
|
83
86
|
export const DATATRACKER_API = {
|
|
84
|
-
/** RFC
|
|
87
|
+
/** RFC document information */
|
|
85
88
|
document: (num) => `https://datatracker.ietf.org/api/v1/doc/document/rfc${num}/`,
|
|
86
89
|
};
|
|
87
90
|
/**
|
|
88
|
-
* RFC
|
|
91
|
+
* Check if RFC is likely available in XML format
|
|
89
92
|
*/
|
|
90
93
|
export function isRFCXMLLikelyAvailable(rfcNumber) {
|
|
91
94
|
return rfcNumber >= RFC_CONFIG.xmlAvailableFrom;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAsC,CAAC;AAEpF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,OAAO,EAAE,WAAW,CAAC,OAAO;CACpB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,wBAAwB;IACxB,SAAS,EAAE,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE;IACzD,8BAA8B;IAC9B,OAAO,EAAE,KAAK;IACd,6BAA6B;IAC7B,UAAU,EAAE,CAAC;CACL,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,iEAAiE;IACjE,GAAG,EAAE;QACH,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,UAAU;KACjB;IACD,0BAA0B;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,WAAW;KAClB;IACD,8CAA8C;IAC9C,QAAQ,EAAE;QACR,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,eAAe;KACtB;IACD,oCAAoC;IACpC,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY;KACnB;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;;;OAGG;IACH,gBAAgB,EAAE,IAAI;CACd,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,0BAA0B;IAC1B,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,qCAAqC,GAAG,MAAM;IAC1E,iBAAiB;IACjB,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,0CAA0C,GAAG,MAAM;IAC/E,kBAAkB;IAClB,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,uCAAuC,GAAG,OAAO;CACvE,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iCAAiC;IACjC,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,qCAAqC,GAAG,MAAM;IAC1E,iBAAiB;IACjB,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,iCAAiC,GAAG,MAAM;CAC9D,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,+BAA+B;IAC/B,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,uDAAuD,GAAG,GAAG;CAChF,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,SAAS,IAAI,UAAU,CAAC,gBAAgB,CAAC;AAClD,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,15 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* BCP 14 / RFC 2119
|
|
2
|
+
* Common Constants
|
|
3
|
+
* BCP 14 / RFC 2119 keywords and patterns
|
|
4
4
|
*/
|
|
5
5
|
import type { RequirementLevel } from './types/index.js';
|
|
6
6
|
/**
|
|
7
|
-
* BCP 14 / RFC 2119
|
|
8
|
-
*
|
|
7
|
+
* BCP 14 / RFC 2119 keywords
|
|
8
|
+
* Ordered by length (longer first to match "MUST NOT" before "MUST")
|
|
9
9
|
*/
|
|
10
10
|
export declare const REQUIREMENT_KEYWORDS: RequirementLevel[];
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Create a new requirement regex instance
|
|
13
|
+
* Safe for use in loops with exec() - avoids lastIndex state issues
|
|
14
|
+
*/
|
|
15
|
+
export declare function createRequirementRegex(): RegExp;
|
|
16
|
+
/**
|
|
17
|
+
* Keyword regex (matches longest first)
|
|
18
|
+
* Note: When using with exec() in loops, prefer createRequirementRegex() to avoid lastIndex issues
|
|
13
19
|
*/
|
|
14
20
|
export declare const REQUIREMENT_REGEX: RegExp;
|
|
21
|
+
/**
|
|
22
|
+
* Section number pattern for parsing RFC text
|
|
23
|
+
* Matches: "1.", "1.1", "1.1.1", etc. followed by title
|
|
24
|
+
* Used in text-based RFC parsing
|
|
25
|
+
*/
|
|
26
|
+
export declare const SECTION_HEADER_PATTERN: RegExp;
|
|
27
|
+
/**
|
|
28
|
+
* Create a section header pattern regex instance
|
|
29
|
+
* Safe for use in loops with exec()
|
|
30
|
+
*/
|
|
31
|
+
export declare function createSectionHeaderRegex(): RegExp;
|
|
32
|
+
/**
|
|
33
|
+
* RFC reference pattern (e.g., "RFC 1234", "RFC1234")
|
|
34
|
+
*/
|
|
35
|
+
export declare function createRFCReferenceRegex(): RegExp;
|
|
36
|
+
/**
|
|
37
|
+
* Section reference pattern (e.g., "Section 1.2", "section 3.4.5")
|
|
38
|
+
*/
|
|
39
|
+
export declare function createSectionReferenceRegex(): RegExp;
|
|
15
40
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAAgB,EAYlD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA2B,CAAC;AAM1D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAgC,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD"}
|
package/dist/constants.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* BCP 14 / RFC 2119
|
|
2
|
+
* Common Constants
|
|
3
|
+
* BCP 14 / RFC 2119 keywords and patterns
|
|
4
4
|
*/
|
|
5
|
+
// ========================================
|
|
6
|
+
// BCP 14 / RFC 2119 Keywords
|
|
7
|
+
// ========================================
|
|
5
8
|
/**
|
|
6
|
-
* BCP 14 / RFC 2119
|
|
7
|
-
*
|
|
9
|
+
* BCP 14 / RFC 2119 keywords
|
|
10
|
+
* Ordered by length (longer first to match "MUST NOT" before "MUST")
|
|
8
11
|
*/
|
|
9
12
|
export const REQUIREMENT_KEYWORDS = [
|
|
10
13
|
'MUST NOT',
|
|
@@ -20,10 +23,49 @@ export const REQUIREMENT_KEYWORDS = [
|
|
|
20
23
|
'OPTIONAL',
|
|
21
24
|
];
|
|
22
25
|
/**
|
|
23
|
-
*
|
|
26
|
+
* Create a new requirement regex instance
|
|
27
|
+
* Safe for use in loops with exec() - avoids lastIndex state issues
|
|
24
28
|
*/
|
|
25
|
-
export
|
|
26
|
-
|
|
29
|
+
export function createRequirementRegex() {
|
|
30
|
+
return new RegExp(`\\b(${REQUIREMENT_KEYWORDS.join('|')})\\b`, 'g');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Keyword regex (matches longest first)
|
|
34
|
+
* Note: When using with exec() in loops, prefer createRequirementRegex() to avoid lastIndex issues
|
|
35
|
+
*/
|
|
36
|
+
export const REQUIREMENT_REGEX = createRequirementRegex();
|
|
37
|
+
// ========================================
|
|
38
|
+
// Section Patterns
|
|
39
|
+
// ========================================
|
|
40
|
+
/**
|
|
41
|
+
* Section number pattern for parsing RFC text
|
|
42
|
+
* Matches: "1.", "1.1", "1.1.1", etc. followed by title
|
|
43
|
+
* Used in text-based RFC parsing
|
|
44
|
+
*/
|
|
45
|
+
export const SECTION_HEADER_PATTERN = /^(\d+(?:\.\d+)*\.?)\s+(.+)$/;
|
|
46
|
+
/**
|
|
47
|
+
* Create a section header pattern regex instance
|
|
48
|
+
* Safe for use in loops with exec()
|
|
49
|
+
*/
|
|
50
|
+
export function createSectionHeaderRegex() {
|
|
51
|
+
return new RegExp(SECTION_HEADER_PATTERN.source);
|
|
52
|
+
}
|
|
53
|
+
// ========================================
|
|
54
|
+
// Cross-Reference Patterns
|
|
55
|
+
// ========================================
|
|
56
|
+
/**
|
|
57
|
+
* RFC reference pattern (e.g., "RFC 1234", "RFC1234")
|
|
58
|
+
*/
|
|
59
|
+
export function createRFCReferenceRegex() {
|
|
60
|
+
return /RFC\s*(\d+)/gi;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Section reference pattern (e.g., "Section 1.2", "section 3.4.5")
|
|
64
|
+
*/
|
|
65
|
+
export function createSectionReferenceRegex() {
|
|
66
|
+
return /[Ss]ection\s+([\d.]+)/g;
|
|
67
|
+
}
|
|
68
|
+
// RFC-related configuration is centralized in config.ts
|
|
27
69
|
// - RFC_CONFIG.xmlAvailableFrom
|
|
28
70
|
// - isRFCXMLLikelyAvailable()
|
|
29
71
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,UAAU;IACV,MAAM;IACN,UAAU;IACV,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,KAAK;IACL,UAAU;CACX,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,2CAA2C;AAC3C,6BAA6B;AAC7B,2CAA2C;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,UAAU;IACV,MAAM;IACN,UAAU;IACV,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,KAAK;IACL,UAAU;CACX,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,MAAM,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAC;AAE1D,2CAA2C;AAC3C,mBAAmB;AACnB,2CAA2C;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,2CAA2C;AAC3C,2BAA2B;AAC3B,2CAA2C;AAE3C;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED,wDAAwD;AACxD,gCAAgC;AAChC,8BAA8B"}
|