durable-map 0.1.1 → 0.1.3

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 (36) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -91
  3. package/dist/analyzer/annotationParser.d.ts.map +1 -1
  4. package/dist/analyzer/annotationParser.js +0 -5
  5. package/dist/analyzer/annotationParser.js.map +1 -1
  6. package/dist/analyzer/autoDetector.d.ts +3 -0
  7. package/dist/analyzer/autoDetector.d.ts.map +1 -0
  8. package/dist/analyzer/autoDetector.js +39 -0
  9. package/dist/analyzer/autoDetector.js.map +1 -0
  10. package/dist/analyzer/callGraphBuilder.d.ts +2 -1
  11. package/dist/analyzer/callGraphBuilder.d.ts.map +1 -1
  12. package/dist/analyzer/callGraphBuilder.js +29 -7
  13. package/dist/analyzer/callGraphBuilder.js.map +1 -1
  14. package/dist/analyzer/types.d.ts +3 -2
  15. package/dist/analyzer/types.d.ts.map +1 -1
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/cli.js +41 -6
  18. package/dist/cli.js.map +1 -1
  19. package/dist/config/configManager.d.ts +14 -0
  20. package/dist/config/configManager.d.ts.map +1 -0
  21. package/dist/config/configManager.js +61 -0
  22. package/dist/config/configManager.js.map +1 -0
  23. package/dist/generator/htmlGenerator.d.ts.map +1 -1
  24. package/dist/generator/htmlGenerator.js +53 -20
  25. package/dist/generator/htmlGenerator.js.map +1 -1
  26. package/dist/generator/jsonGenerator.d.ts.map +1 -1
  27. package/dist/generator/jsonGenerator.js +10 -5
  28. package/dist/generator/jsonGenerator.js.map +1 -1
  29. package/dist/generator/markdownGenerator.d.ts.map +1 -1
  30. package/dist/generator/markdownGenerator.js +44 -17
  31. package/dist/generator/markdownGenerator.js.map +1 -1
  32. package/dist/generator/mermaidGenerator.d.ts +5 -0
  33. package/dist/generator/mermaidGenerator.d.ts.map +1 -1
  34. package/dist/generator/mermaidGenerator.js +142 -14
  35. package/dist/generator/mermaidGenerator.js.map +1 -1
  36. package/package.json +31 -5
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Taishi Yamashita
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,137 +1,178 @@
1
1
  # durable-map
2
2
 
3
- Azure Durable Functions の C# プロジェクトを解析し、関数の呼び出し関係を Markdown / JSON / HTML + Mermaid で可視化する CLI ツール。
3
+ [![npm version](https://img.shields.io/npm/v/durable-map.svg)](https://www.npmjs.com/package/durable-map)
4
+ [![npm downloads](https://img.shields.io/npm/dm/durable-map.svg)](https://www.npmjs.com/package/durable-map)
5
+ [![license](https://img.shields.io/npm/l/durable-map.svg)](https://github.com/taishiyamashita1114/durable-map/blob/main/LICENSE)
4
6
 
5
- ## インストール
7
+ > Analyze Azure Durable Functions projects and auto-generate documentation with Mermaid flow diagrams.
6
8
 
7
- ```bash
8
- npm install
9
- npm run build
9
+ Azure Durable Functions の構成を静的解析し、トリガー → オーケストレーター → アクティビティ → インフラ層の呼び出し関係をドキュメントと Mermaid フローチャートで自動生成する CLI ツール。
10
+
11
+ ## Features
12
+
13
+ - C# isolated worker model の自動解析
14
+ - Mermaid フローチャートの自動生成
15
+ - Markdown / JSON / HTML ドキュメントの自動生成
16
+ - トリガー → オーケストレーター → アクティビティの呼び出し関係を可視化
17
+ - インフラ層の自動検出 + `.durable-map.yml` による設定管理
18
+ - `@durable-map:infra` アノテーションによる手動補完
19
+
20
+ ## Output Example
21
+
22
+ ```mermaid
23
+ graph LR
24
+ A(["HTTP POST /api/order"]) --> B[["Orchestrator: ProcessOrder"]]
25
+ B -->|activity| C["ValidateOrder"]
26
+ B -->|activity| D["ChargePayment"]
27
+ B -->|activity| E["SendConfirmation"]
28
+ C -.->|SQL| F[("SQL:orders-db")]
29
+ D -.->|HTTP| G["HTTP:stripe-api"]
30
+ E -.->|Email| H["Email:sendgrid"]
10
31
  ```
11
32
 
12
- ## 基本的な使い方
33
+ ## Quick Start
13
34
 
14
35
  ```bash
15
- npx tsx src/index.ts <C#プロジェクトのパス> [options]
36
+ npx durable-map ./path/to/azure-functions-project
16
37
  ```
17
38
 
18
- 対象パスの `.cs` ファイルを再帰的にスキャンし、Durable Functions の定義(Client / Orchestrator / Activity / Entity)と呼び出し関係を解析します。
39
+ ### 2-Step Workflow
19
40
 
20
- ### 出力形式
41
+ **Step 1**: 初回実行 — 解析 + `.durable-map.yml` の自動生成
21
42
 
22
43
  ```bash
23
- # Markdown 出力(デフォルト)— stdout に出力
24
- npx tsx src/index.ts ./MyFunctionsProject
44
+ npx durable-map ./path/to/project -o docs/durable-map.md
45
+ ```
25
46
 
26
- # ファイルに保存
27
- npx tsx src/index.ts ./MyFunctionsProject -o output.md
47
+ 初回実行時に解析対象ディレクトリに `.durable-map.yml` が生成されます。
48
+ 自動検出された Azure SDK パターンは自動で埋まり、検出できなかったアクティビティは空欄になります。
28
49
 
29
- # HTML 出力(ブラウザで Mermaid 図をレンダリング)
30
- npx tsx src/index.ts ./MyFunctionsProject -f html -o output.html
50
+ ```
51
+ 🔍 Scanning .cs files...
52
+ 📦 Found 36 functions (12 Client, 6 Orchestrator, 18 Activities)
53
+ ✅ Generated: .durable-map.yml
54
+ ⚠️ 以下のアクティビティのインフラ層が未設定です:
55
+ - ChargePayment
56
+ - SendConfirmation
57
+ → .durable-map.yml を編集して再実行してください
58
+ ```
31
59
 
32
- # JSON 出力(他ツールとの連携用)
33
- npx tsx src/index.ts ./MyFunctionsProject -f json -o output.json
60
+ **Step 2**: `.durable-map.yml` を編集して再実行
61
+
62
+ ```yaml
63
+ # .durable-map.yml
64
+ infrastructure:
65
+ ValidateOrder:
66
+ - type: SQL
67
+ resource: orders-db
68
+ description: Validate order data
69
+ ChargePayment:
70
+ - type: HTTP
71
+ resource: stripe-api
72
+ description: Process payment via Stripe
73
+ SendConfirmation:
74
+ - type: Email
75
+ resource: sendgrid
76
+ description: Send confirmation email
77
+ ```
34
78
 
35
- # Mermaid 図なしの Markdown
36
- npx tsx src/index.ts ./MyFunctionsProject --no-mermaid
79
+ ```bash
80
+ npx durable-map ./path/to/project -o docs/durable-map.md
37
81
  ```
38
82
 
39
- ### 表示深度(`--depth`)
83
+ 設定済みのインフラ情報が Mermaid 図とドキュメントに反映されます。
84
+
85
+ ## Options
40
86
 
41
87
  ```bash
42
- # shallow(デフォルト): Client → Orchestrator の関係のみ
43
- npx tsx src/index.ts ./MyFunctionsProject
88
+ durable-map ./path/to/project -o ./docs/durable-map.md
44
89
 
45
- # deep: Client → Orchestrator → Activity まで表示
46
- npx tsx src/index.ts ./MyFunctionsProject -d deep
90
+ durable-map ./path/to/project --format json
47
91
 
48
- # deep + HTML で全体像をブラウザ確認
49
- npx tsx src/index.ts ./MyFunctionsProject -d deep -f html -o output.html
92
+ durable-map ./path/to/project --format html -o output.html
93
+
94
+ durable-map ./path/to/project --depth shallow
50
95
  ```
51
96
 
52
- | Mode | 表示内容 |
97
+ | Option | Description |
53
98
  |---|---|
54
- | `shallow` (デフォルト) | Client Orchestrator の呼び出し関係のみ |
55
- | `deep` | Client Orchestrator Activity ノードまで表示。アノテーションで指定されたインフラ情報も含む |
99
+ | `-f, --format <format>` | Output format (`markdown` \| `json` \| `html`) Default: `markdown` |
100
+ | `-o, --output <file>` | Output file (default: stdout) |
101
+ | `-d, --depth <mode>` | Display depth (`shallow` \| `deep`) Default: `deep` |
102
+ | `--exclude <patterns...>` | Exclude patterns |
103
+ | `--no-mermaid` | Disable Mermaid diagram generation |
104
+ | `-v, --verbose` | Verbose logging |
56
105
 
57
- ### その他のオプション
106
+ ## Infrastructure Detection
58
107
 
59
- ```bash
60
- # 特定ディレクトリを除外
61
- npx tsx src/index.ts ./MyFunctionsProject --exclude "**/Tests/**" "**/bin/**"
108
+ ### Auto-Detection
62
109
 
63
- # 詳細ログ
64
- npx tsx src/index.ts ./MyFunctionsProject -v
65
- ```
110
+ Activities are scanned for Azure SDK client usage:
66
111
 
67
- ### オプション一覧
68
-
69
- | Option | Description |
112
+ | Pattern | Type |
70
113
  |---|---|
71
- | `-f, --format <format>` | 出力形式 (`markdown` \| `json` \| `html`) デフォルト: `markdown` |
72
- | `-o, --output <file>` | 出力先ファイル (デフォルト: stdout) |
73
- | `-d, --depth <mode>` | 表示深度 (`shallow` \| `deep`) デフォルト: `shallow` |
74
- | `--exclude <patterns...>` | 除外パターン |
75
- | `--no-mermaid` | Mermaid 図を生成しない |
76
- | `-v, --verbose` | 詳細ログ |
114
+ | `CosmosClient`, `CosmosContainer` | CosmosDB |
115
+ | `BlobServiceClient`, `BlobContainerClient` | BlobStorage |
116
+ | `QueueClient`, `QueueServiceClient` | Queue |
117
+ | `TableClient`, `TableServiceClient` | TableStorage |
118
+ | `ServiceBusClient`, `ServiceBusSender` | ServiceBus |
119
+ | `EventHubProducerClient`, `EventHubConsumerClient` | EventHub |
120
+ | `HttpClient`, `IHttpClientFactory` | HTTP |
121
+ | `SqlConnection`, `SqlCommand` | SQL |
122
+ | `IConnectionMultiplexer`, `ConnectionMultiplexer` | Redis |
123
+ | `SendGridClient`, `SmtpClient` | Email |
124
+
125
+ ### `.durable-map.yml` Config
126
+
127
+ 自動検出できないインフラ依存関係は `.durable-map.yml` で設定できます。
128
+ `type` には任意の文字列が使えます(上記のビルトインパターンに限定されません)。
129
+
130
+ ```yaml
131
+ infrastructure:
132
+ MyActivity:
133
+ - type: LogAnalytics
134
+ resource: workspace-name
135
+ description: Query security logs
136
+ - type: SQL
137
+ resource: my-db
138
+ description: Store analysis results
139
+ ```
77
140
 
78
- ## アノテーション
141
+ ### `@durable-map:infra` Annotation
79
142
 
80
- Activity 関数のコード内に `// @durable-map:infra` コメントを記述すると、`--depth deep` 使用時に Mermaid 図へインフラノード(DB・Queue 等)を表示できます。
143
+ コード内にアノテーションを直接記述することもできます:
81
144
 
82
145
  ```csharp
83
- [Function("SaveOrderActivity")]
84
- public async Task Run([ActivityTrigger] OrderData input)
85
- {
86
- // @durable-map:infra cosmosdb:orders "Order database"
87
- // @durable-map:infra blob:receipts
88
- await _container.CreateItemAsync(input);
89
- }
146
+ // @durable-map:infra SQL:orders "Order database"
147
+ // @durable-map:infra HTTP:stripe-api
148
+ public class SaveOrder : TaskActivity<OrderData, bool> { ... }
90
149
  ```
91
150
 
92
- **書式:** `// @durable-map:infra <kind>:<resource> "<description>"`
151
+ ### Priority
93
152
 
94
- | パラメータ | 必須 | 説明 |
95
- |---|---|---|
96
- | `kind` | Yes | `cosmosdb` \| `blob` \| `queue` \| `table` \| `servicebus` \| `eventhub` \| `http` \| `sql` |
97
- | `resource` | No | リソース名(コンテナ名、キュー名など) |
98
- | `description` | No | 説明文(ダブルクォートで囲む) |
153
+ config (`.durable-map.yml`) > annotation (`@durable-map:infra`) > auto-detection
99
154
 
100
- ## Mermaid 図の手動編集
155
+ ## Supported Languages
101
156
 
102
- 生成された Mermaid 図にインフラ層を手動で追記することもできます。
157
+ | Language | Model | Status |
158
+ |----------|-------|--------|
159
+ | C# | isolated worker | Supported |
160
+ | Python | V2 | Planned |
161
+ | TypeScript | V4 | Planned |
103
162
 
104
- ```mermaid
105
- graph LR
106
- HttpStart(["HttpStart"])
107
- Orchestrator[["Orchestrator"]]
108
- SaveOrder["SaveOrder"]
109
- HttpStart -->|scheduleOrchestration| Orchestrator
110
- Orchestrator -->|callActivity| SaveOrder
111
-
112
- %% インフラ層(手動追記)
113
- CosmosDB[("CosmosDB\norders")]
114
- BlobStorage[("Blob\nuploads")]
115
- SaveOrder -.->|cosmosdb| CosmosDB
116
- SaveOrder -.->|blob| BlobStorage
117
- ```
163
+ ## How It Works
118
164
 
119
- ノード形状の目安:
165
+ 1. Recursively scans `.cs` files in the target directory
166
+ 2. Detects `[Function]`, `[HttpTrigger]`, `[OrchestrationTrigger]`, `[ActivityTrigger]` attributes
167
+ 3. Analyzes `CallActivityAsync`, `CallSubOrchestratorAsync` call patterns
168
+ 4. Auto-detects Azure SDK usage in activity bodies
169
+ 5. Loads `.durable-map.yml` config for manual infrastructure mapping
170
+ 6. Builds a call graph and outputs Markdown + Mermaid / JSON / HTML
120
171
 
121
- | 種別 | Mermaid 記法 | 例 |
122
- |---|---|---|
123
- | DB 系 | `[("label")]` (シリンダー) | `CosmosDB[("CosmosDB")]` |
124
- | Queue / Stream 系 | `[["label"]]` (二重四角) | `Queue[["Queue"]]` |
125
- | 外部 API | `>"label"]` (非対称) | `API>"External API"]` |
172
+ ## Feedback / Contact
126
173
 
127
- ## Development
128
-
129
- ```bash
130
- npm install
131
- npm test
132
- ```
174
+ [Contact Form](https://forms.gle/2VvCjT3EDesHJsBU8)
133
175
 
134
- ## Roadmap
176
+ ## License
135
177
 
136
- - Mermaid 図の整形・レイアウト改善
137
- - Azure Subscription 連携 (App Service Plan / App Service 名などのインフラ情報を出力に含める)
178
+ MIT
@@ -1 +1 @@
1
- {"version":3,"file":"annotationParser.d.ts","sourceRoot":"","sources":["../../src/analyzer/annotationParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AAQxD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CAyB9E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAUlG"}
1
+ {"version":3,"file":"annotationParser.d.ts","sourceRoot":"","sources":["../../src/analyzer/annotationParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CAwB9E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAUlG"}
@@ -1,15 +1,10 @@
1
1
  const ANNOTATION_RE = /\/\/\s*@durable-map:infra\s+(\w+)(?::(\S+))?\s*(?:"([^"]*)")?/g;
2
- const VALID_KINDS = new Set([
3
- "cosmosdb", "blob", "queue", "table", "servicebus", "eventhub", "http", "sql",
4
- ]);
5
2
  export function parseAnnotations(text, startLine) {
6
3
  const usages = [];
7
4
  const re = new RegExp(ANNOTATION_RE.source, ANNOTATION_RE.flags);
8
5
  let m;
9
6
  while ((m = re.exec(text)) !== null) {
10
7
  const kind = m[1];
11
- if (!VALID_KINDS.has(kind))
12
- continue;
13
8
  let line = startLine;
14
9
  for (let i = 0; i < m.index; i++) {
15
10
  if (text[i] === "\n")
@@ -1 +1 @@
1
- {"version":3,"file":"annotationParser.js","sourceRoot":"","sources":["../../src/analyzer/annotationParser.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,gEAAgE,CAAC;AAEvF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAY;IACrC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK;CAC9E,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAC9D,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACjE,IAAI,CAAyB,CAAC;IAE9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAc,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAErC,IAAI,IAAI,GAAG,SAAS,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;YAC3B,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;YAC9B,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACT,IAAI;YACJ,MAAM,EAAE,YAAY;SACrB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAkB,EAAE,WAAyB;IAClF,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CACxD,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAC5D,CAAC;IAEF,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"annotationParser.js","sourceRoot":"","sources":["../../src/analyzer/annotationParser.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,gEAAgE,CAAC;AAEvF,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAC9D,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACjE,IAAI,CAAyB,CAAC;IAE9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAElB,IAAI,IAAI,GAAG,SAAS,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;YAC3B,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;YAC9B,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACT,IAAI;YACJ,MAAM,EAAE,YAAY;SACrB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAkB,EAAE,WAAyB;IAClF,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CACxD,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAC5D,CAAC;IAEF,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { InfraUsage } from "./types.js";
2
+ export declare function detectInfraUsages(bodyText: string, startLine: number): InfraUsage[];
3
+ //# sourceMappingURL=autoDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoDetector.d.ts","sourceRoot":"","sources":["../../src/analyzer/autoDetector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAe7C,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CA4BnF"}
@@ -0,0 +1,39 @@
1
+ const PATTERNS = [
2
+ [/\bCosmosClient\b|\bCosmosContainer\b|\bContainer\s*=\s*.*\.GetContainer\b/, "CosmosDB"],
3
+ [/\bBlobServiceClient\b|\bBlobContainerClient\b|\bBlobClient\b/, "BlobStorage"],
4
+ [/\bQueueClient\b|\bQueueServiceClient\b/, "Queue"],
5
+ [/\bTableClient\b|\bTableServiceClient\b/, "TableStorage"],
6
+ [/\bServiceBusClient\b|\bServiceBusSender\b|\bServiceBusReceiver\b/, "ServiceBus"],
7
+ [/\bEventHubProducerClient\b|\bEventHubConsumerClient\b/, "EventHub"],
8
+ [/\bHttpClient\b|\bIHttpClientFactory\b/, "HTTP"],
9
+ [/\bSqlConnection\b|\bSqlCommand\b/, "SQL"],
10
+ [/\bIConnectionMultiplexer\b|\bIDatabase\b|\bConnectionMultiplexer\b/, "Redis"],
11
+ [/\bSendGridClient\b|\bSmtpClient\b|\bMailMessage\b/, "Email"],
12
+ ];
13
+ export function detectInfraUsages(bodyText, startLine) {
14
+ const usages = [];
15
+ const seen = new Set();
16
+ for (const [pattern, kind] of PATTERNS) {
17
+ const re = new RegExp(pattern.source, pattern.flags + "g");
18
+ let m;
19
+ while ((m = re.exec(bodyText)) !== null) {
20
+ if (seen.has(kind))
21
+ continue;
22
+ seen.add(kind);
23
+ let line = startLine;
24
+ for (let i = 0; i < m.index; i++) {
25
+ if (bodyText[i] === "\n")
26
+ line++;
27
+ }
28
+ usages.push({
29
+ kind,
30
+ raw: m[0],
31
+ line,
32
+ source: "auto",
33
+ });
34
+ break;
35
+ }
36
+ }
37
+ return usages;
38
+ }
39
+ //# sourceMappingURL=autoDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoDetector.js","sourceRoot":"","sources":["../../src/analyzer/autoDetector.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAuB;IACnC,CAAC,2EAA2E,EAAE,UAAU,CAAC;IACzF,CAAC,8DAA8D,EAAE,aAAa,CAAC;IAC/E,CAAC,wCAAwC,EAAE,OAAO,CAAC;IACnD,CAAC,wCAAwC,EAAE,cAAc,CAAC;IAC1D,CAAC,kEAAkE,EAAE,YAAY,CAAC;IAClF,CAAC,uDAAuD,EAAE,UAAU,CAAC;IACrE,CAAC,uCAAuC,EAAE,MAAM,CAAC;IACjD,CAAC,kCAAkC,EAAE,KAAK,CAAC;IAC3C,CAAC,oEAAoE,EAAE,OAAO,CAAC;IAC/E,CAAC,mDAAmD,EAAE,OAAO,CAAC;CAC/D,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,SAAiB;IACnE,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAyB,CAAC;QAE9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,IAAI,GAAG,SAAS,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI;oBAAE,IAAI,EAAE,CAAC;YACnC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACT,IAAI;gBACJ,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YACH,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { DurableFunction, AnalysisResult } from "./types.js";
2
+ import type { DurableMapConfig } from "../config/configManager.js";
2
3
  export declare function buildCallGraph(functions: DurableFunction[]): AnalysisResult;
3
- export declare function enrichWithInfra(result: AnalysisResult): AnalysisResult;
4
+ export declare function enrichWithInfra(result: AnalysisResult, config?: DurableMapConfig | null): AnalysisResult;
4
5
  //# sourceMappingURL=callGraphBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"callGraphBuilder.d.ts","sourceRoot":"","sources":["../../src/analyzer/callGraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAY,cAAc,EAAwB,MAAM,YAAY,CAAC;AAGlG,wBAAgB,cAAc,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,cAAc,CAgD3E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CA6CtE"}
1
+ {"version":3,"file":"callGraphBuilder.d.ts","sourceRoot":"","sources":["../../src/analyzer/callGraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAY,cAAc,EAAoC,MAAM,YAAY,CAAC;AAG9G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,wBAAgB,cAAc,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,cAAc,CAgD3E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,GAAE,gBAAgB,GAAG,IAAW,GAAG,cAAc,CAkE9G"}
@@ -1,4 +1,5 @@
1
- import { parseAnnotations } from "./annotationParser.js";
1
+ import { parseAnnotations, mergeWithAutoDetection } from "./annotationParser.js";
2
+ import { detectInfraUsages } from "./autoDetector.js";
2
3
  export function buildCallGraph(functions) {
3
4
  const warnings = [];
4
5
  const nameIndex = new Map();
@@ -42,16 +43,36 @@ export function buildCallGraph(functions) {
42
43
  },
43
44
  };
44
45
  }
45
- export function enrichWithInfra(result) {
46
+ export function enrichWithInfra(result, config = null) {
46
47
  const infraNodeMap = new Map();
47
48
  const infraEdges = [];
49
+ const autoDetectedMap = new Map();
48
50
  for (const fn of result.functions) {
49
- if (fn.role !== "activity" || !fn.bodyText)
51
+ if (fn.role !== "activity")
50
52
  continue;
51
- const bodyStartLine = fn.line;
52
- const annotations = parseAnnotations(fn.bodyText, bodyStartLine);
53
- fn.infraUsages = annotations;
54
- for (const usage of annotations) {
53
+ let usages = [];
54
+ if (config && config.infrastructure[fn.name]) {
55
+ const entries = config.infrastructure[fn.name];
56
+ usages = entries
57
+ .filter((e) => e.type !== "")
58
+ .map((e) => ({
59
+ kind: e.type,
60
+ resource: e.resource || undefined,
61
+ description: e.description || undefined,
62
+ raw: `config:${e.type}`,
63
+ line: fn.line,
64
+ source: "config",
65
+ }));
66
+ }
67
+ else if (fn.bodyText) {
68
+ const bodyStartLine = fn.line;
69
+ const auto = detectInfraUsages(fn.bodyText, bodyStartLine);
70
+ const annotations = parseAnnotations(fn.bodyText, bodyStartLine);
71
+ usages = mergeWithAutoDetection(auto, annotations);
72
+ autoDetectedMap.set(fn.name, auto);
73
+ }
74
+ fn.infraUsages = usages;
75
+ for (const usage of usages) {
55
76
  const nodeId = usage.resource ? `${usage.kind}:${usage.resource}` : usage.kind;
56
77
  if (!infraNodeMap.has(nodeId)) {
57
78
  infraNodeMap.set(nodeId, {
@@ -75,6 +96,7 @@ export function enrichWithInfra(result) {
75
96
  ...result,
76
97
  infraNodes,
77
98
  infraEdges,
99
+ autoDetectedMap,
78
100
  metadata: {
79
101
  ...result.metadata,
80
102
  infraNodeCount: infraNodes.length,
@@ -1 +1 @@
1
- {"version":3,"file":"callGraphBuilder.js","sourceRoot":"","sources":["../../src/analyzer/callGraphBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"callGraphBuilder.js","sourceRoot":"","sources":["../../src/analyzer/callGraphBuilder.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ export type TriggerKind = "http" | "orchestration" | "activity" | "entity" | "ti
2
2
  export type FunctionRole = "orchestrator" | "activity" | "entity" | "client" | "unknown";
3
3
  export type CallKind = "callActivity" | "callSubOrchestrator" | "scheduleOrchestration" | "callEntity";
4
4
  export type FunctionStyle = "attribute" | "class-based";
5
- export type InfraKind = "cosmosdb" | "blob" | "queue" | "table" | "servicebus" | "eventhub" | "http" | "sql";
5
+ export type InfraKind = string;
6
6
  export type DepthMode = "shallow" | "deep";
7
7
  export interface InfraUsage {
8
8
  kind: InfraKind;
@@ -10,7 +10,7 @@ export interface InfraUsage {
10
10
  description?: string;
11
11
  raw: string;
12
12
  line: number;
13
- source: "auto" | "annotation";
13
+ source: "auto" | "annotation" | "config";
14
14
  }
15
15
  export interface InfraNode {
16
16
  id: string;
@@ -64,6 +64,7 @@ export interface AnalysisResult {
64
64
  edges: CallEdge[];
65
65
  infraNodes: InfraNode[];
66
66
  infraEdges: InfraEdge[];
67
+ autoDetectedMap?: Map<string, InfraUsage[]>;
67
68
  warnings: string[];
68
69
  metadata: {
69
70
  analyzedAt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyzer/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyzer/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,eAAe,GACf,UAAU,GACV,QAAQ,GACR,OAAO,GACP,OAAO,GACP,MAAM,GACN,eAAe,CAAC;AAEpB,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,qBAAqB,GACrB,uBAAuB,GACvB,YAAY,CAAC;AAEjB,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;CAC1C;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,EAAE,CAAC;CACtD"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,aAAa,IAAI,OAAO,CAmEvC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,aAAa,IAAI,OAAO,CAoGvC"}
package/dist/cli.js CHANGED
@@ -9,6 +9,7 @@ import { buildCallGraph, enrichWithInfra } from "./analyzer/callGraphBuilder.js"
9
9
  import { generateMarkdown } from "./generator/markdownGenerator.js";
10
10
  import { generateJson } from "./generator/jsonGenerator.js";
11
11
  import { generateHtml } from "./generator/htmlGenerator.js";
12
+ import { loadConfig, saveConfig, mergeConfig, buildConfigFromResult } from "./config/configManager.js";
12
13
  import { setVerbose, info, success, warn, verbose } from "./utils/logger.js";
13
14
  export function createProgram() {
14
15
  const program = new Command();
@@ -19,7 +20,7 @@ export function createProgram() {
19
20
  .argument("<path>", "C# プロジェクトのパス")
20
21
  .option("-o, --output <file>", "出力先ファイル (デフォルト: stdout)")
21
22
  .option("-f, --format <format>", "出力形式 (markdown | json | html)", "markdown")
22
- .option("-d, --depth <mode>", "表示の深さ (shallow | deep)", "shallow")
23
+ .option("-d, --depth <mode>", "表示の深さ (shallow | deep)", "deep")
23
24
  .option("--exclude <patterns...>", "除外パターン")
24
25
  .option("--no-mermaid", "Mermaid 図を生成しない")
25
26
  .option("-v, --verbose", "詳細ログ")
@@ -27,7 +28,8 @@ export function createProgram() {
27
28
  if (opts.verbose)
28
29
  setVerbose(true);
29
30
  const absPath = resolve(inputPath);
30
- const depth = opts.depth === "deep" ? "deep" : "shallow";
31
+ const depth = opts.depth === "shallow" ? "shallow" : "deep";
32
+ const configDir = absPath;
31
33
  verbose(`Scanning: ${absPath}`);
32
34
  const extensions = getRegisteredExtensions();
33
35
  const files = await scanFiles(absPath, extensions, {
@@ -37,13 +39,46 @@ export function createProgram() {
37
39
  warn("No files found.");
38
40
  return;
39
41
  }
40
- info(`Found ${files.length} file(s)`);
42
+ info(`🔍 Scanning .cs files...`);
41
43
  const parser = new CSharpParser();
42
44
  const functions = analyzeFiles(files, [parser]);
43
45
  verbose(`Parsed ${functions.length} function(s)`);
46
+ const roleCounts = new Map();
47
+ for (const fn of functions) {
48
+ roleCounts.set(fn.role, (roleCounts.get(fn.role) ?? 0) + 1);
49
+ }
50
+ const countParts = [];
51
+ if (roleCounts.get("client"))
52
+ countParts.push(`${roleCounts.get("client")} Client`);
53
+ if (roleCounts.get("orchestrator"))
54
+ countParts.push(`${roleCounts.get("orchestrator")} Orchestrator`);
55
+ if (roleCounts.get("activity"))
56
+ countParts.push(`${roleCounts.get("activity")} Activities`);
57
+ if (roleCounts.get("entity"))
58
+ countParts.push(`${roleCounts.get("entity")} Entities`);
59
+ info(`📦 Found ${functions.length} functions (${countParts.join(", ")})`);
44
60
  let result = buildCallGraph(functions);
45
- if (depth === "deep") {
46
- result = enrichWithInfra(result);
61
+ const existingConfig = await loadConfig(configDir);
62
+ result = enrichWithInfra(result, existingConfig);
63
+ if (!existingConfig) {
64
+ const activities = result.functions.filter((f) => f.role === "activity");
65
+ const newConfig = buildConfigFromResult(activities, result.autoDetectedMap ?? new Map());
66
+ await saveConfig(configDir, newConfig);
67
+ success(`Generated: .durable-map.yml`);
68
+ }
69
+ else {
70
+ const activities = result.functions.filter((f) => f.role === "activity");
71
+ const merged = mergeConfig(existingConfig, activities, result.autoDetectedMap ?? new Map());
72
+ await saveConfig(configDir, merged);
73
+ }
74
+ const unconfigured = result.functions
75
+ .filter((f) => f.role === "activity" && f.infraUsages.length === 0);
76
+ if (unconfigured.length > 0) {
77
+ warn(`以下のアクティビティのインフラ層が未設定です:`);
78
+ for (const fn of unconfigured) {
79
+ warn(` - ${fn.name}`);
80
+ }
81
+ info(`→ .durable-map.yml を編集して再実行してください`);
47
82
  }
48
83
  for (const w of result.warnings) {
49
84
  warn(w);
@@ -60,7 +95,7 @@ export function createProgram() {
60
95
  }
61
96
  if (opts.output) {
62
97
  await writeFile(opts.output, output, "utf-8");
63
- success(`Output written to ${opts.output}`);
98
+ success(`Generated: ${opts.output}`);
64
99
  }
65
100
  else {
66
101
  process.stdout.write(output);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { DurableFunction, InfraUsage } from "../analyzer/types.js";
2
+ export interface ActivityInfraEntry {
3
+ type: string;
4
+ resource: string;
5
+ description: string;
6
+ }
7
+ export interface DurableMapConfig {
8
+ infrastructure: Record<string, ActivityInfraEntry[]>;
9
+ }
10
+ export declare function loadConfig(cwd: string): Promise<DurableMapConfig | null>;
11
+ export declare function saveConfig(cwd: string, config: DurableMapConfig): Promise<void>;
12
+ export declare function mergeConfig(existing: DurableMapConfig, activities: DurableFunction[], detected: Map<string, InfraUsage[]>): DurableMapConfig;
13
+ export declare function buildConfigFromResult(activities: DurableFunction[], detected: Map<string, InfraUsage[]>): DurableMapConfig;
14
+ //# sourceMappingURL=configManager.d.ts.map