@basemachina/bm-action-dep-parser 0.0.1 → 0.0.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.
- package/README.md +36 -7
- package/dist/analyze-action-dependencies.d.ts +4 -1
- package/dist/analyze-action-dependencies.js +26 -10
- package/dist/analyze-action-dependencies.js.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/cover-bm-views/src/bm-ext/components/hooks.d.ts +8 -0
- package/dist/cover-bm-views/src/bm-ext/components/hooks.js +19 -0
- package/dist/cover-bm-views/src/bm-ext/components/hooks.js.map +1 -0
- package/dist/cover-bm-views/src/utils/date.d.ts +9 -0
- package/dist/cover-bm-views/src/utils/date.js +28 -0
- package/dist/cover-bm-views/src/utils/date.js.map +1 -0
- package/dist/cover-bm-views/src/utils/string.d.ts +2 -0
- package/dist/cover-bm-views/src/utils/string.js +11 -0
- package/dist/cover-bm-views/src/utils/string.js.map +1 -0
- package/dist/lib/action-dependency-graph-builder.d.ts +46 -0
- package/dist/lib/action-dependency-graph-builder.js +188 -0
- package/dist/lib/action-dependency-graph-builder.js.map +1 -0
- package/dist/lib/entry-point-analyzer.js +5 -2
- package/dist/lib/entry-point-analyzer.js.map +1 -1
- package/dist/lib/result-formatter.js +4 -1
- package/dist/lib/result-formatter.js.map +1 -1
- package/dist/tests/e2e/analyze-action-dependencies.test.js +17 -0
- package/dist/tests/e2e/analyze-action-dependencies.test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -33,33 +33,62 @@ BaseMachina アクション依存関係解析ツール
|
|
|
33
33
|
- **ビューのエントリーポイント分析**: ビューのエントリーポイントから直接・間接的に依存しているすべてのアクションを可視化(ビューは常にエントリーポイント分析モード)
|
|
34
34
|
- **カスタムエントリーポイントパターン**: エントリーポイントを柔軟に指定可能(デフォルトは `pages/**/*.{tsx,jsx,ts,js}`)
|
|
35
35
|
|
|
36
|
+
### 出力例
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
npx @basemachina/bm-action-dep-parser view ./bm-action-dep-parser/tests/fixtures/views
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"entrypoint": "pages/SortableFormPage.tsx",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"direct": [],
|
|
45
|
+
"indirect": {
|
|
46
|
+
"components/SortableForm.tsx": [
|
|
47
|
+
"get-products",
|
|
48
|
+
"update-category"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"entrypoint": "pages/paginatedTable/index.tsx",
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"direct": [
|
|
57
|
+
"get-users"
|
|
58
|
+
],
|
|
59
|
+
"indirect": {}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
```
|
|
64
|
+
|
|
36
65
|
## 使用方法
|
|
37
66
|
|
|
38
67
|
### CLIツールとして使用
|
|
39
68
|
|
|
40
69
|
```bash
|
|
41
|
-
npx bm-action-dep-parser action ./packages/actions/js
|
|
42
|
-
npx bm-action-dep-parser view ./packages/views
|
|
70
|
+
npx @basemachina/bm-action-dep-parser action ./packages/actions/js
|
|
71
|
+
npx @basemachina/bm-action-dep-parser view ./packages/views
|
|
43
72
|
```
|
|
44
73
|
|
|
45
74
|
### オプション
|
|
46
75
|
|
|
47
76
|
```bash
|
|
48
77
|
# 出力形式を指定(text または json)
|
|
49
|
-
npx bm-action-dep-parser action ./packages/actions/js --format json
|
|
78
|
+
npx @basemachina/bm-action-dep-parser action ./packages/actions/js --format json
|
|
50
79
|
|
|
51
80
|
# カスタムエントリーポイントパターンを指定(ビューの場合のみ)
|
|
52
|
-
npx bm-action-dep-parser view ./packages/views --entry-point-patterns "**/*.tsx"
|
|
81
|
+
npx @basemachina/bm-action-dep-parser view ./packages/views --entry-point-patterns "**/*.tsx"
|
|
53
82
|
|
|
54
83
|
# ヘルプを表示
|
|
55
|
-
npx bm-action-dep-parser --help
|
|
84
|
+
npx @basemachina/bm-action-dep-parser --help
|
|
56
85
|
```
|
|
57
86
|
|
|
58
87
|
### ローカルでの実行
|
|
59
88
|
|
|
60
89
|
```bash
|
|
61
|
-
|
|
62
|
-
|
|
90
|
+
pnpm run analyze action ./packages/actions/js
|
|
91
|
+
pnpm run analyze view ./packages/views
|
|
63
92
|
```
|
|
64
93
|
|
|
65
94
|
## 技術詳細
|
|
@@ -39,6 +39,7 @@ const file_finder_1 = require("./lib/file-finder");
|
|
|
39
39
|
const code_analyzer_1 = require("./lib/code-analyzer");
|
|
40
40
|
const dependency_extractor_1 = require("./lib/dependency-extractor");
|
|
41
41
|
const dependency_graph_builder_1 = require("./lib/dependency-graph-builder");
|
|
42
|
+
const action_dependency_graph_builder_1 = require("./lib/action-dependency-graph-builder");
|
|
42
43
|
const entry_point_analyzer_1 = require("./lib/entry-point-analyzer");
|
|
43
44
|
/**
|
|
44
45
|
* アクション依存関係を解析する関数
|
|
@@ -66,18 +67,33 @@ async function analyzeActionDependencies(targetType, targetDir, entryPointPatter
|
|
|
66
67
|
}
|
|
67
68
|
// アクションの場合
|
|
68
69
|
if (targetType === 'action') {
|
|
69
|
-
//
|
|
70
|
+
// 依存関係グラフの構築
|
|
71
|
+
const dependencyGraph = new action_dependency_graph_builder_1.ActionDependencyGraph(targetDir);
|
|
72
|
+
for (const file of files) {
|
|
73
|
+
await dependencyGraph.addFile(file);
|
|
74
|
+
}
|
|
75
|
+
// 依存関係グラフを構築
|
|
76
|
+
dependencyGraph.buildDependencyGraph();
|
|
77
|
+
// 各ファイルの依存関係を解析
|
|
70
78
|
const result = [];
|
|
71
|
-
for (const
|
|
72
|
-
|
|
73
|
-
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
// 依存関係を取得
|
|
81
|
+
const dependencies = dependencyGraph.getReachableActionDependencies(file);
|
|
82
|
+
// 依存関係がある場合のみ結果に追加
|
|
83
|
+
if (dependencies.direct.length > 0 || dependencies.indirect.size > 0) {
|
|
84
|
+
// コマンドで指定したディレクトリからの相対パスに変換
|
|
85
|
+
const relativePath = path.relative(targetDir, file);
|
|
86
|
+
result.push({
|
|
87
|
+
entrypoint: relativePath,
|
|
88
|
+
dependencies: {
|
|
89
|
+
direct: dependencies.direct,
|
|
90
|
+
indirect: Object.fromEntries(Array.from(dependencies.indirect.entries()).map(([key, value]) => [
|
|
91
|
+
path.relative(targetDir, key),
|
|
92
|
+
value
|
|
93
|
+
]))
|
|
94
|
+
}
|
|
95
|
+
});
|
|
74
96
|
}
|
|
75
|
-
// コマンドで指定したディレクトリからの相対パスに変換
|
|
76
|
-
const relativePath = path.relative(targetDir, file);
|
|
77
|
-
result.push({
|
|
78
|
-
entrypoint: relativePath,
|
|
79
|
-
dependencies: deps
|
|
80
|
-
});
|
|
81
97
|
}
|
|
82
98
|
return result;
|
|
83
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-action-dependencies.js","sourceRoot":"","sources":["../analyze-action-dependencies.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"analyze-action-dependencies.js","sourceRoot":"","sources":["../analyze-action-dependencies.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const analyze_action_dependencies_1 = require("./analyze-action-dependencies");
|
|
5
|
+
const entry_point_analyzer_1 = require("./lib/entry-point-analyzer");
|
|
5
6
|
// コマンドライン引数の解析
|
|
6
7
|
const args = process.argv.slice(2);
|
|
7
8
|
// ヘルプメッセージの表示
|
|
@@ -33,7 +34,7 @@ if (!targetType || !targetDir) {
|
|
|
33
34
|
process.exit(1);
|
|
34
35
|
}
|
|
35
36
|
// オプションの解析
|
|
36
|
-
let entryPointPatterns =
|
|
37
|
+
let entryPointPatterns = entry_point_analyzer_1.defaultEntryPointPatterns;
|
|
37
38
|
for (let i = 2; i < args.length; i++) {
|
|
38
39
|
const arg = args[i];
|
|
39
40
|
if (arg === '--entry-point-patterns' && i + 1 < args.length) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";;;AAEA,+EAAsF;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";;;AAEA,+EAAsF;AAEtF,qEAAuE;AAEvE,eAAe;AACf,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,cAAc;AACd,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcf,CAAC,CAAC;IACC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,QAAQ;AACR,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAe,CAAC;AACzC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAE1B,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAChF,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,WAAW;AACX,IAAI,kBAAkB,GAAa,gDAAyB,CAAC;AAE7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG,KAAK,wBAAwB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1D,kBAAkB,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC,EAAE,CAAC;IACR,CAAC;AACL,CAAC;AAED,QAAQ;AACR,IAAA,uDAAyB,EAAC,UAAU,EAAE,SAAS,EAAE,kBAAkB,CAAC;KAC/D,IAAI,CAAC,MAAM,CAAC,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC;KACD,KAAK,CAAC,KAAK,CAAC,EAAE;IACX,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* リクエスト完了までdataを保持する useExecuteActionLazy のラッパー
|
|
3
|
+
*/
|
|
4
|
+
export declare function useExecuteActionLazyKeepData<T = any>(actionName: string): readonly [(params?: Record<string, any>) => any, {
|
|
5
|
+
readonly data: any;
|
|
6
|
+
readonly loading: boolean;
|
|
7
|
+
readonly error: unknown;
|
|
8
|
+
}];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useExecuteActionLazyKeepData = useExecuteActionLazyKeepData;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const view_1 = require("@basemachina/view");
|
|
6
|
+
/**
|
|
7
|
+
* リクエスト完了までdataを保持する useExecuteActionLazy のラッパー
|
|
8
|
+
*/
|
|
9
|
+
function useExecuteActionLazyKeepData(actionName) {
|
|
10
|
+
const [execute, state] = (0, view_1.useExecuteActionLazy)(actionName);
|
|
11
|
+
const [data, setData] = (0, react_1.useState)();
|
|
12
|
+
(0, react_1.useEffect)(() => {
|
|
13
|
+
if (!state.loading) {
|
|
14
|
+
setData(state.data);
|
|
15
|
+
}
|
|
16
|
+
}, [state]);
|
|
17
|
+
return [execute, { data, loading: state.loading, error: state.error }];
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../cover-bm-views/src/bm-ext/components/hooks.ts"],"names":[],"mappings":";;AAMA,oEAWC;AAjBD,iCAA4C;AAC5C,4CAAkF;AAElF;;GAEG;AACH,SAAgB,4BAA4B,CAAU,UAAkB;IACtE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,IAAA,2BAAqB,EAAI,UAAU,CAAC,CAAC;IAC9D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,GAAqB,CAAC;IAEtD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAU,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toUnixTime = toUnixTime;
|
|
4
|
+
exports.toJST = toJST;
|
|
5
|
+
/**
|
|
6
|
+
* BMのフォームで設定した時刻を unixtime に変換する
|
|
7
|
+
* ex) 2024/10/10 12:00:00 -> 1728529200
|
|
8
|
+
*/
|
|
9
|
+
function toUnixTime(value) {
|
|
10
|
+
if (value === "")
|
|
11
|
+
return "";
|
|
12
|
+
const date = new Date(value + "+09:00");
|
|
13
|
+
return Math.floor(date.getTime() / 1000);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* BMのアクションから取得した時刻をJSTに変換する
|
|
17
|
+
*/
|
|
18
|
+
function toJST(value) {
|
|
19
|
+
if (value === "")
|
|
20
|
+
return "";
|
|
21
|
+
const date = new Date(value + "+00:00");
|
|
22
|
+
date.setMinutes(date.getMinutes() - date.getTimezoneOffset());
|
|
23
|
+
return date
|
|
24
|
+
.toISOString()
|
|
25
|
+
.replace("T", " ")
|
|
26
|
+
.replace(/:\d+\.\d+Z$/, "");
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../../../cover-bm-views/src/utils/date.ts"],"names":[],"mappings":";;AAIA,gCAIC;AAKD,sBAQC;AArBD;;;GAGG;AACH,SAAgB,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,KAAa;IACjC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC9D,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;SACjB,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toEmptyString = toEmptyString;
|
|
4
|
+
exports.toBoolean = toBoolean;
|
|
5
|
+
function toEmptyString(value) {
|
|
6
|
+
return value === "NULL" ? "" : value;
|
|
7
|
+
}
|
|
8
|
+
function toBoolean(value) {
|
|
9
|
+
return value === "1";
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../../../cover-bm-views/src/utils/string.ts"],"names":[],"mappings":";;AAAA,sCAEC;AAED,8BAEC;AAND,SAAgB,aAAa,CAAC,KAAU;IACtC,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,CAAC;AAED,SAAgB,SAAS,CAAC,KAAU;IAClC,OAAO,KAAK,KAAK,GAAG,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* アクション間の依存関係を表すグラフ
|
|
3
|
+
*/
|
|
4
|
+
export declare class ActionDependencyGraph {
|
|
5
|
+
private graph;
|
|
6
|
+
private directActionDependencies;
|
|
7
|
+
private normalizedPaths;
|
|
8
|
+
private actionToFilePath;
|
|
9
|
+
private baseDir;
|
|
10
|
+
constructor(baseDir: string);
|
|
11
|
+
/**
|
|
12
|
+
* ファイルを解析してグラフに追加
|
|
13
|
+
* @param filePath ファイルパス
|
|
14
|
+
*/
|
|
15
|
+
addFile(filePath: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* 依存関係グラフを構築
|
|
18
|
+
* 全てのファイルを解析した後に呼び出す必要がある
|
|
19
|
+
*/
|
|
20
|
+
buildDependencyGraph(): void;
|
|
21
|
+
/**
|
|
22
|
+
* ファイルパスを正規化(絶対パスに変換)
|
|
23
|
+
* @param filePath ファイルパス
|
|
24
|
+
* @returns 正規化されたファイルパス
|
|
25
|
+
*/
|
|
26
|
+
private normalizePath;
|
|
27
|
+
/**
|
|
28
|
+
* エントリーポイントから到達可能なすべてのアクション依存関係を取得
|
|
29
|
+
* @param entryPoint エントリーポイントのファイルパス
|
|
30
|
+
* @returns 直接依存するアクションと間接依存するアクション(ファイルパスごと)
|
|
31
|
+
*/
|
|
32
|
+
getReachableActionDependencies(entryPoint: string): {
|
|
33
|
+
direct: string[];
|
|
34
|
+
indirect: Map<string, string[]>;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* 依存関係グラフの統計情報を取得
|
|
38
|
+
* @returns 統計情報
|
|
39
|
+
*/
|
|
40
|
+
getStats(): {
|
|
41
|
+
totalFiles: number;
|
|
42
|
+
totalDependencies: number;
|
|
43
|
+
filesWithActionDependencies: number;
|
|
44
|
+
totalActionDependencies: number;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ActionDependencyGraph = void 0;
|
|
37
|
+
const ts = __importStar(require("typescript"));
|
|
38
|
+
const fsPromises = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const dependency_extractor_1 = require("./dependency-extractor");
|
|
41
|
+
/**
|
|
42
|
+
* アクション間の依存関係を表すグラフ
|
|
43
|
+
*/
|
|
44
|
+
class ActionDependencyGraph {
|
|
45
|
+
constructor(baseDir) {
|
|
46
|
+
// アクション間の依存関係を表すグラフ(キー:ファイルパス、値:依存先ファイルパスのセット)
|
|
47
|
+
this.graph = new Map();
|
|
48
|
+
// 各ファイルが直接依存するアクション(キー:ファイルパス、値:アクション識別子のセット)
|
|
49
|
+
this.directActionDependencies = new Map();
|
|
50
|
+
// ファイルパスの正規化(絶対パスに変換)
|
|
51
|
+
this.normalizedPaths = new Map();
|
|
52
|
+
// アクション識別子とファイルパスのマッピング
|
|
53
|
+
this.actionToFilePath = new Map();
|
|
54
|
+
this.baseDir = path.resolve(baseDir);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* ファイルを解析してグラフに追加
|
|
58
|
+
* @param filePath ファイルパス
|
|
59
|
+
*/
|
|
60
|
+
async addFile(filePath) {
|
|
61
|
+
const normalizedPath = this.normalizePath(filePath);
|
|
62
|
+
// すでに解析済みの場合はスキップ
|
|
63
|
+
if (this.graph.has(normalizedPath)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
// ファイルの内容を読み込む
|
|
68
|
+
const content = await fsPromises.readFile(filePath, 'utf-8');
|
|
69
|
+
// TypeScriptのパーサーを使用してASTを生成
|
|
70
|
+
const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
|
|
71
|
+
// アクション呼び出しを解析
|
|
72
|
+
const actionCalls = (0, dependency_extractor_1.extractDependencies)(sourceFile, 'action');
|
|
73
|
+
// 直接依存するアクションを記録
|
|
74
|
+
if (actionCalls.length > 0) {
|
|
75
|
+
this.directActionDependencies.set(normalizedPath, new Set(actionCalls));
|
|
76
|
+
}
|
|
77
|
+
// アクション識別子とファイルパスのマッピングを更新
|
|
78
|
+
// ファイル名(拡張子なし)とアクション識別子が一致する場合、マッピングを作成
|
|
79
|
+
const fileName = path.basename(filePath, path.extname(filePath));
|
|
80
|
+
this.actionToFilePath.set(fileName, normalizedPath);
|
|
81
|
+
// 依存関係グラフを更新(初期状態では空のセット)
|
|
82
|
+
this.graph.set(normalizedPath, new Set());
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error(`Error analyzing file ${filePath}:`, error);
|
|
86
|
+
// エラーが発生した場合は空の依存関係を設定
|
|
87
|
+
this.graph.set(normalizedPath, new Set());
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 依存関係グラフを構築
|
|
92
|
+
* 全てのファイルを解析した後に呼び出す必要がある
|
|
93
|
+
*/
|
|
94
|
+
buildDependencyGraph() {
|
|
95
|
+
// 各ファイルの直接依存するアクションに対応するファイルパスを探索
|
|
96
|
+
for (const [filePath, actionDependencies] of this.directActionDependencies.entries()) {
|
|
97
|
+
const dependencies = new Set();
|
|
98
|
+
for (const actionDependency of actionDependencies) {
|
|
99
|
+
// アクション識別子に対応するファイルパスを検索
|
|
100
|
+
for (const [action, file] of this.actionToFilePath.entries()) {
|
|
101
|
+
if (actionDependency === action) {
|
|
102
|
+
dependencies.add(file);
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// 依存関係グラフを更新
|
|
108
|
+
this.graph.set(filePath, dependencies);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* ファイルパスを正規化(絶対パスに変換)
|
|
113
|
+
* @param filePath ファイルパス
|
|
114
|
+
* @returns 正規化されたファイルパス
|
|
115
|
+
*/
|
|
116
|
+
normalizePath(filePath) {
|
|
117
|
+
if (this.normalizedPaths.has(filePath)) {
|
|
118
|
+
return this.normalizedPaths.get(filePath);
|
|
119
|
+
}
|
|
120
|
+
const normalizedPath = path.resolve(this.baseDir, filePath);
|
|
121
|
+
this.normalizedPaths.set(filePath, normalizedPath);
|
|
122
|
+
return normalizedPath;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* エントリーポイントから到達可能なすべてのアクション依存関係を取得
|
|
126
|
+
* @param entryPoint エントリーポイントのファイルパス
|
|
127
|
+
* @returns 直接依存するアクションと間接依存するアクション(ファイルパスごと)
|
|
128
|
+
*/
|
|
129
|
+
getReachableActionDependencies(entryPoint) {
|
|
130
|
+
const normalizedEntryPoint = this.normalizePath(entryPoint);
|
|
131
|
+
const visited = new Set();
|
|
132
|
+
const indirect = new Map();
|
|
133
|
+
// 深さ優先探索でグラフを走査
|
|
134
|
+
const dfs = (node) => {
|
|
135
|
+
if (visited.has(node)) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
visited.add(node);
|
|
139
|
+
const dependencies = this.graph.get(node);
|
|
140
|
+
if (!dependencies) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
for (const dependency of dependencies) {
|
|
144
|
+
const normalizedDependency = this.normalizePath(dependency);
|
|
145
|
+
// エントリーポイント自身でない場合のみ間接依存関係として追加
|
|
146
|
+
if (normalizedDependency !== normalizedEntryPoint) {
|
|
147
|
+
// 依存先ファイルが直接依存するアクションを取得
|
|
148
|
+
const actionDependencies = this.directActionDependencies.get(normalizedDependency);
|
|
149
|
+
if (actionDependencies && actionDependencies.size > 0) {
|
|
150
|
+
indirect.set(normalizedDependency, Array.from(actionDependencies));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// 依存先ファイルを再帰的に探索
|
|
154
|
+
dfs(normalizedDependency);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
// エントリーポイントから探索を開始
|
|
158
|
+
dfs(normalizedEntryPoint);
|
|
159
|
+
// エントリーポイント自身が直接依存するアクションを取得
|
|
160
|
+
const direct = this.directActionDependencies.get(normalizedEntryPoint) || new Set();
|
|
161
|
+
return {
|
|
162
|
+
direct: Array.from(direct),
|
|
163
|
+
indirect
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* 依存関係グラフの統計情報を取得
|
|
168
|
+
* @returns 統計情報
|
|
169
|
+
*/
|
|
170
|
+
getStats() {
|
|
171
|
+
let totalDependencies = 0;
|
|
172
|
+
for (const dependencies of this.graph.values()) {
|
|
173
|
+
totalDependencies += dependencies.size;
|
|
174
|
+
}
|
|
175
|
+
let totalActionDependencies = 0;
|
|
176
|
+
for (const actionDependencies of this.directActionDependencies.values()) {
|
|
177
|
+
totalActionDependencies += actionDependencies.size;
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
totalFiles: this.graph.size,
|
|
181
|
+
totalDependencies,
|
|
182
|
+
filesWithActionDependencies: this.directActionDependencies.size,
|
|
183
|
+
totalActionDependencies
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
exports.ActionDependencyGraph = ActionDependencyGraph;
|
|
188
|
+
//# sourceMappingURL=action-dependency-graph-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-dependency-graph-builder.js","sourceRoot":"","sources":["../../lib/action-dependency-graph-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,10 @@ exports.findEntryPoints = findEntryPoints;
|
|
|
38
38
|
exports.analyzeEntryPoints = analyzeEntryPoints;
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
40
|
const glob_1 = require("glob");
|
|
41
|
-
exports.defaultEntryPointPatterns = [
|
|
41
|
+
exports.defaultEntryPointPatterns = [
|
|
42
|
+
"pages/**/*.{tsx,jsx,ts,js}", // Next.js風の構造
|
|
43
|
+
"*.{tsx,jsx,ts,js}" // フラットな構造(ルート直下のファイル)
|
|
44
|
+
];
|
|
42
45
|
/**
|
|
43
46
|
* 指定されたパターンに一致するファイルをエントリーポイントとして特定
|
|
44
47
|
* @param viewsDir ビューのディレクトリパス
|
|
@@ -63,7 +66,7 @@ async function findEntryPoints(viewsDir, entryPointPatterns = exports.defaultEnt
|
|
|
63
66
|
}
|
|
64
67
|
dirToFiles.get(dir).push(file);
|
|
65
68
|
}
|
|
66
|
-
for (const [
|
|
69
|
+
for (const [_dir, dirFiles] of dirToFiles.entries()) {
|
|
67
70
|
const indexFile = dirFiles.find(file => path.basename(file).startsWith('index.'));
|
|
68
71
|
if (indexFile) {
|
|
69
72
|
entryPoints.push(indexFile);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-point-analyzer.js","sourceRoot":"","sources":["../../lib/entry-point-analyzer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"entry-point-analyzer.js","sourceRoot":"","sources":["../../lib/entry-point-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,10 @@ function formatJavaScriptActionDependencyAnalysisResult(dependencies) {
|
|
|
20
20
|
const relativePath = path_1.default.relative(process.cwd(), file);
|
|
21
21
|
result.push({
|
|
22
22
|
entrypoint: relativePath,
|
|
23
|
-
dependencies:
|
|
23
|
+
dependencies: {
|
|
24
|
+
direct: deps,
|
|
25
|
+
indirect: {}
|
|
26
|
+
}
|
|
24
27
|
});
|
|
25
28
|
}
|
|
26
29
|
return JSON.stringify(result, null, 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-formatter.js","sourceRoot":"","sources":["../../lib/result-formatter.ts"],"names":[],"mappings":";;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"result-formatter.js","sourceRoot":"","sources":["../../lib/result-formatter.ts"],"names":[],"mappings":";;;;;AAQA,wGAqBC;AAOD,gFAgBC;AApDD,gDAAwB;AAGxB;;;;GAIG;AACH,SAAgB,8CAA8C,CAC5D,YAAsC;IAEtC,MAAM,MAAM,GAAiC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC;YACV,UAAU,EAAE,YAAY;YACxB,YAAY,EAAE;gBACZ,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,EAAE;aACb;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,SAAgB,kCAAkC,CAChD,sBAGE;IAEF,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC;YACV,UAAU,EAAE,UAAU;YACtB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -93,6 +93,23 @@ describe('View dependencies analysis', () => {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
|
+
it('should correctly analyze flat structure view dependencies', async () => {
|
|
97
|
+
// フラット構造のビューを解析
|
|
98
|
+
const result = await (0, analyze_action_dependencies_1.analyzeActionDependencies)('view', path.resolve(__dirname, '../fixtures/views-flat'));
|
|
99
|
+
// 結果を検証
|
|
100
|
+
expect(result).toHaveLength(2);
|
|
101
|
+
// Dashboard.tsxの依存関係を確認
|
|
102
|
+
const dashboard = result.find(r => r.entrypoint === 'Dashboard.tsx');
|
|
103
|
+
expect(dashboard).toBeDefined();
|
|
104
|
+
expect(dashboard?.dependencies.direct).toContain('get-dashboard-stats');
|
|
105
|
+
expect(dashboard?.dependencies.direct).toContain('get-recent-activity');
|
|
106
|
+
expect(dashboard?.dependencies.direct).toHaveLength(2);
|
|
107
|
+
// Settings.tsxの依存関係を確認
|
|
108
|
+
const settings = result.find(r => r.entrypoint === 'Settings.tsx');
|
|
109
|
+
expect(settings).toBeDefined();
|
|
110
|
+
expect(settings?.dependencies.direct).toContain('update-user-settings');
|
|
111
|
+
expect(settings?.dependencies.direct).toHaveLength(1);
|
|
112
|
+
});
|
|
96
113
|
});
|
|
97
114
|
describe('Invalid arguments', () => {
|
|
98
115
|
it('should handle invalid target type', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-action-dependencies.test.js","sourceRoot":"","sources":["../../../tests/e2e/analyze-action-dependencies.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analyze-action-dependencies.test.js","sourceRoot":"","sources":["../../../tests/e2e/analyze-action-dependencies.test.ts"],"names":[],"mappings":"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"}
|