@nahisaho/musubix-core 1.1.2 → 1.1.4

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.
@@ -0,0 +1,110 @@
1
+ /**
2
+ * AdapterNaming - Adapter命名規則モジュール
3
+ *
4
+ * @description Adapterパターンの命名規則を標準化
5
+ * @requirement REQ-MUSUBIX-LEARN-003 (SDD Workflow Feedback)
6
+ * @version 1.1.4
7
+ *
8
+ * 学習フィードバック PAT-006 の改善:
9
+ * - 命名規則の一貫性: IXxxServiceAdapter
10
+ * - Service/Repository/Gateway の明確な区分
11
+ * - 混乱を防ぐ標準命名パターン
12
+ */
13
+ /**
14
+ * Adapter命名パターン
15
+ */
16
+ export type AdapterType = 'service' | 'repository' | 'gateway';
17
+ /**
18
+ * Adapterの標準命名規則
19
+ *
20
+ * パターン: I{Domain}{Type}Adapter
21
+ *
22
+ * 例:
23
+ * - IMemberServiceAdapter (会員サービスアダプター)
24
+ * - ITicketServiceAdapter (チケットサービスアダプター)
25
+ * - IPaymentGatewayAdapter (決済ゲートウェイアダプター)
26
+ */
27
+ export interface AdapterNamingRule {
28
+ /** ドメイン名(例: Member, Ticket, Payment) */
29
+ domain: string;
30
+ /** Adapterタイプ */
31
+ type: AdapterType;
32
+ /** 生成されるインターフェース名 */
33
+ interfaceName: string;
34
+ /** 生成される実装クラス名 */
35
+ implementationName: string;
36
+ }
37
+ /**
38
+ * AdapterNamingHelper - Adapter命名ヘルパー
39
+ */
40
+ export declare class AdapterNamingHelper {
41
+ /**
42
+ * Adapterインターフェース名を生成
43
+ *
44
+ * @param domain - ドメイン名
45
+ * @param type - Adapterタイプ
46
+ * @returns インターフェース名
47
+ */
48
+ static generateInterfaceName(domain: string, type: AdapterType): string;
49
+ /**
50
+ * Adapter実装クラス名を生成
51
+ *
52
+ * @param domain - ドメイン名
53
+ * @param type - Adapterタイプ
54
+ * @param variant - バリアント(例: InMemory, Http, Mock)
55
+ * @returns 実装クラス名
56
+ */
57
+ static generateImplementationName(domain: string, type: AdapterType, variant?: string): string;
58
+ /**
59
+ * 命名規則に従った完全なAdapter定義を生成
60
+ *
61
+ * @param domain - ドメイン名
62
+ * @param type - Adapterタイプ
63
+ * @returns 命名ルール
64
+ */
65
+ static generateNamingRule(domain: string, type: AdapterType): AdapterNamingRule;
66
+ /**
67
+ * 既存のAdapter名を標準形式に正規化
68
+ *
69
+ * @param currentName - 現在のAdapter名
70
+ * @returns 正規化された名前と推奨事項
71
+ */
72
+ static normalizeAdapterName(currentName: string): {
73
+ normalized: string;
74
+ wasCorrect: boolean;
75
+ suggestion?: string;
76
+ };
77
+ /**
78
+ * TypeScriptコード内のAdapter命名を検証
79
+ *
80
+ * @param code - 検証対象のコード
81
+ * @returns 検証結果と推奨事項
82
+ */
83
+ static validateAdapterNames(code: string): {
84
+ valid: string[];
85
+ invalid: {
86
+ name: string;
87
+ suggestion: string;
88
+ }[];
89
+ };
90
+ }
91
+ /**
92
+ * Adapter命名の標準テンプレート
93
+ */
94
+ export declare const ADAPTER_TEMPLATES: {
95
+ /**
96
+ * サービスアダプターテンプレート
97
+ */
98
+ serviceAdapter: (domain: string) => string;
99
+ /**
100
+ * リポジトリアダプターテンプレート
101
+ */
102
+ repositoryAdapter: (domain: string) => string;
103
+ /**
104
+ * ゲートウェイアダプターテンプレート
105
+ */
106
+ gatewayAdapter: (domain: string) => string;
107
+ };
108
+ export declare const adapterNamingHelper: AdapterNamingHelper;
109
+ export declare function createAdapterNamingHelper(): typeof AdapterNamingHelper;
110
+ //# sourceMappingURL=adapter-naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-naming.d.ts","sourceRoot":"","sources":["../../src/codegen/adapter-naming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAE/D;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;IAUvE;;;;;;;OAOG;IACH,MAAM,CAAC,0BAA0B,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,MAAW,GACnB,MAAM;IAWT;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,iBAAiB;IAS/E;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG;QAChD,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAgCD;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;QACzC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACjD;CAmBF;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;6BACsB,MAAM;IAS/B;;OAEG;gCACyB,MAAM;IASlC;;OAEG;6BACsB,MAAM;CAQhC,CAAC;AAGF,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AAG7D,wBAAgB,yBAAyB,IAAI,OAAO,mBAAmB,CAEtE"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * AdapterNaming - Adapter命名規則モジュール
3
+ *
4
+ * @description Adapterパターンの命名規則を標準化
5
+ * @requirement REQ-MUSUBIX-LEARN-003 (SDD Workflow Feedback)
6
+ * @version 1.1.4
7
+ *
8
+ * 学習フィードバック PAT-006 の改善:
9
+ * - 命名規則の一貫性: IXxxServiceAdapter
10
+ * - Service/Repository/Gateway の明確な区分
11
+ * - 混乱を防ぐ標準命名パターン
12
+ */
13
+ /**
14
+ * AdapterNamingHelper - Adapter命名ヘルパー
15
+ */
16
+ export class AdapterNamingHelper {
17
+ /**
18
+ * Adapterインターフェース名を生成
19
+ *
20
+ * @param domain - ドメイン名
21
+ * @param type - Adapterタイプ
22
+ * @returns インターフェース名
23
+ */
24
+ static generateInterfaceName(domain, type) {
25
+ const capitalizedDomain = domain.charAt(0).toUpperCase() + domain.slice(1);
26
+ const typeMap = {
27
+ service: 'Service',
28
+ repository: 'Repository',
29
+ gateway: 'Gateway',
30
+ };
31
+ return `I${capitalizedDomain}${typeMap[type]}Adapter`;
32
+ }
33
+ /**
34
+ * Adapter実装クラス名を生成
35
+ *
36
+ * @param domain - ドメイン名
37
+ * @param type - Adapterタイプ
38
+ * @param variant - バリアント(例: InMemory, Http, Mock)
39
+ * @returns 実装クラス名
40
+ */
41
+ static generateImplementationName(domain, type, variant = '') {
42
+ const capitalizedDomain = domain.charAt(0).toUpperCase() + domain.slice(1);
43
+ const typeMap = {
44
+ service: 'Service',
45
+ repository: 'Repository',
46
+ gateway: 'Gateway',
47
+ };
48
+ const prefix = variant ? `${variant}` : '';
49
+ return `${prefix}${capitalizedDomain}${typeMap[type]}Adapter`;
50
+ }
51
+ /**
52
+ * 命名規則に従った完全なAdapter定義を生成
53
+ *
54
+ * @param domain - ドメイン名
55
+ * @param type - Adapterタイプ
56
+ * @returns 命名ルール
57
+ */
58
+ static generateNamingRule(domain, type) {
59
+ return {
60
+ domain,
61
+ type,
62
+ interfaceName: this.generateInterfaceName(domain, type),
63
+ implementationName: this.generateImplementationName(domain, type),
64
+ };
65
+ }
66
+ /**
67
+ * 既存のAdapter名を標準形式に正規化
68
+ *
69
+ * @param currentName - 現在のAdapter名
70
+ * @returns 正規化された名前と推奨事項
71
+ */
72
+ static normalizeAdapterName(currentName) {
73
+ // パターン: I{Domain}Adapter → I{Domain}ServiceAdapter
74
+ const shortPattern = /^I([A-Z][a-zA-Z]+)Adapter$/;
75
+ const shortMatch = currentName.match(shortPattern);
76
+ if (shortMatch) {
77
+ const domain = shortMatch[1];
78
+ const normalized = `I${domain}ServiceAdapter`;
79
+ return {
80
+ normalized,
81
+ wasCorrect: false,
82
+ suggestion: `'${currentName}' should be renamed to '${normalized}' for consistency`,
83
+ };
84
+ }
85
+ // パターン: I{Domain}ServiceAdapter(正しい形式)
86
+ const correctPattern = /^I([A-Z][a-zA-Z]+)(Service|Repository|Gateway)Adapter$/;
87
+ if (correctPattern.test(currentName)) {
88
+ return {
89
+ normalized: currentName,
90
+ wasCorrect: true,
91
+ };
92
+ }
93
+ // その他のパターン
94
+ return {
95
+ normalized: currentName,
96
+ wasCorrect: false,
97
+ suggestion: `'${currentName}' does not follow the naming convention: I{Domain}{Type}Adapter`,
98
+ };
99
+ }
100
+ /**
101
+ * TypeScriptコード内のAdapter命名を検証
102
+ *
103
+ * @param code - 検証対象のコード
104
+ * @returns 検証結果と推奨事項
105
+ */
106
+ static validateAdapterNames(code) {
107
+ const adapterPattern = /interface\s+(I[A-Z][a-zA-Z]*Adapter)/g;
108
+ const valid = [];
109
+ const invalid = [];
110
+ let match;
111
+ while ((match = adapterPattern.exec(code)) !== null) {
112
+ const name = match[1];
113
+ const result = this.normalizeAdapterName(name);
114
+ if (result.wasCorrect) {
115
+ valid.push(name);
116
+ }
117
+ else if (result.suggestion) {
118
+ invalid.push({ name, suggestion: result.suggestion });
119
+ }
120
+ }
121
+ return { valid, invalid };
122
+ }
123
+ }
124
+ /**
125
+ * Adapter命名の標準テンプレート
126
+ */
127
+ export const ADAPTER_TEMPLATES = {
128
+ /**
129
+ * サービスアダプターテンプレート
130
+ */
131
+ serviceAdapter: (domain) => `
132
+ /**
133
+ * ${domain}サービスアダプターインターフェース
134
+ */
135
+ export interface I${domain}ServiceAdapter {
136
+ // サービスメソッドを定義
137
+ }
138
+ `,
139
+ /**
140
+ * リポジトリアダプターテンプレート
141
+ */
142
+ repositoryAdapter: (domain) => `
143
+ /**
144
+ * ${domain}リポジトリアダプターインターフェース
145
+ */
146
+ export interface I${domain}RepositoryAdapter {
147
+ // リポジトリメソッドを定義
148
+ }
149
+ `,
150
+ /**
151
+ * ゲートウェイアダプターテンプレート
152
+ */
153
+ gatewayAdapter: (domain) => `
154
+ /**
155
+ * ${domain}ゲートウェイアダプターインターフェース
156
+ */
157
+ export interface I${domain}GatewayAdapter {
158
+ // 外部連携メソッドを定義
159
+ }
160
+ `,
161
+ };
162
+ // シングルトンインスタンス
163
+ export const adapterNamingHelper = new AdapterNamingHelper();
164
+ // ファクトリ関数
165
+ export function createAdapterNamingHelper() {
166
+ return AdapterNamingHelper;
167
+ }
168
+ //# sourceMappingURL=adapter-naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-naming.js","sourceRoot":"","sources":["../../src/codegen/adapter-naming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * BaseRepository - 標準Repository基底インターフェース
3
+ *
4
+ * @description 一貫したRepositoryパターンの実装を提供
5
+ * @requirement REQ-MUSUBIX-LEARN-002 (SDD Workflow Feedback)
6
+ * @version 1.1.3
7
+ *
8
+ * 学習フィードバック PAT-005 の改善:
9
+ * - Repository メソッドシグネチャの標準化
10
+ * - updateMany(ids[], data) 形式を標準として採用
11
+ * - コード一貫性の向上
12
+ */
13
+ /**
14
+ * 基底Repositoryインターフェース
15
+ *
16
+ * @template T - エンティティ型
17
+ * @template ID - IDの型(デフォルト: string)
18
+ */
19
+ export interface IRepository<T, ID = string> {
20
+ /**
21
+ * エンティティを保存
22
+ */
23
+ save(entity: T): Promise<T>;
24
+ /**
25
+ * 複数エンティティを保存
26
+ */
27
+ saveMany(entities: T[]): Promise<T[]>;
28
+ /**
29
+ * IDでエンティティを検索
30
+ */
31
+ findById(id: ID): Promise<T | null>;
32
+ /**
33
+ * 全エンティティを取得
34
+ */
35
+ findAll(): Promise<T[]>;
36
+ /**
37
+ * エンティティを更新
38
+ */
39
+ update(id: ID, data: Partial<T>): Promise<T>;
40
+ /**
41
+ * 複数エンティティを一括更新(標準シグネチャ)
42
+ * @param ids - 更新対象のID配列
43
+ * @param data - 更新データ
44
+ */
45
+ updateMany(ids: ID[], data: Partial<T>): Promise<T[]>;
46
+ /**
47
+ * エンティティを削除
48
+ */
49
+ delete(id: ID): Promise<boolean>;
50
+ }
51
+ /**
52
+ * 検索可能なRepositoryインターフェース
53
+ */
54
+ export interface ISearchableRepository<T, ID = string> extends IRepository<T, ID> {
55
+ /**
56
+ * 条件で検索
57
+ */
58
+ findBy(criteria: Partial<T>): Promise<T[]>;
59
+ /**
60
+ * 条件で1件検索
61
+ */
62
+ findOneBy(criteria: Partial<T>): Promise<T | null>;
63
+ /**
64
+ * 件数をカウント
65
+ */
66
+ count(criteria?: Partial<T>): Promise<number>;
67
+ }
68
+ /**
69
+ * ページネーション付きRepositoryインターフェース
70
+ */
71
+ export interface IPaginatedRepository<T, ID = string> extends ISearchableRepository<T, ID> {
72
+ /**
73
+ * ページネーション付き検索
74
+ */
75
+ findPaginated(criteria: Partial<T>, options: PaginationOptions): Promise<PaginatedResult<T>>;
76
+ }
77
+ /**
78
+ * ページネーションオプション
79
+ */
80
+ export interface PaginationOptions {
81
+ page: number;
82
+ limit: number;
83
+ sortBy?: string;
84
+ sortOrder?: 'asc' | 'desc';
85
+ }
86
+ /**
87
+ * ページネーション結果
88
+ */
89
+ export interface PaginatedResult<T> {
90
+ data: T[];
91
+ total: number;
92
+ page: number;
93
+ limit: number;
94
+ totalPages: number;
95
+ hasNext: boolean;
96
+ hasPrev: boolean;
97
+ }
98
+ /**
99
+ * インメモリRepository実装(テスト用)
100
+ */
101
+ export declare class InMemoryRepository<T extends {
102
+ id: string;
103
+ }> implements IRepository<T> {
104
+ protected storage: Map<string, T>;
105
+ save(entity: T): Promise<T>;
106
+ saveMany(entities: T[]): Promise<T[]>;
107
+ findById(id: string): Promise<T | null>;
108
+ findAll(): Promise<T[]>;
109
+ update(id: string, data: Partial<T>): Promise<T>;
110
+ updateMany(ids: string[], data: Partial<T>): Promise<T[]>;
111
+ delete(id: string): Promise<boolean>;
112
+ /**
113
+ * テスト用: ストレージをクリア
114
+ */
115
+ clear(): void;
116
+ /**
117
+ * テスト用: 現在の件数を取得
118
+ */
119
+ size(): number;
120
+ }
121
+ /**
122
+ * 検索可能なインメモリRepository実装
123
+ */
124
+ export declare class SearchableInMemoryRepository<T extends {
125
+ id: string;
126
+ }> extends InMemoryRepository<T> implements ISearchableRepository<T> {
127
+ findBy(criteria: Partial<T>): Promise<T[]>;
128
+ findOneBy(criteria: Partial<T>): Promise<T | null>;
129
+ count(criteria?: Partial<T>): Promise<number>;
130
+ }
131
+ /**
132
+ * Repository作成のファクトリー関数
133
+ */
134
+ export declare function createInMemoryRepository<T extends {
135
+ id: string;
136
+ }>(): InMemoryRepository<T>;
137
+ export declare function createSearchableRepository<T extends {
138
+ id: string;
139
+ }>(): SearchableInMemoryRepository<T>;
140
+ //# sourceMappingURL=base-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-repository.d.ts","sourceRoot":"","sources":["../../src/codegen/base-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * BaseRepository - 標準Repository基底インターフェース
3
+ *
4
+ * @description 一貫したRepositoryパターンの実装を提供
5
+ * @requirement REQ-MUSUBIX-LEARN-002 (SDD Workflow Feedback)
6
+ * @version 1.1.3
7
+ *
8
+ * 学習フィードバック PAT-005 の改善:
9
+ * - Repository メソッドシグネチャの標準化
10
+ * - updateMany(ids[], data) 形式を標準として採用
11
+ * - コード一貫性の向上
12
+ */
13
+ /**
14
+ * インメモリRepository実装(テスト用)
15
+ */
16
+ export class InMemoryRepository {
17
+ storage = new Map();
18
+ async save(entity) {
19
+ this.storage.set(entity.id, { ...entity });
20
+ return entity;
21
+ }
22
+ async saveMany(entities) {
23
+ entities.forEach((e) => this.storage.set(e.id, { ...e }));
24
+ return entities;
25
+ }
26
+ async findById(id) {
27
+ const entity = this.storage.get(id);
28
+ return entity ? { ...entity } : null;
29
+ }
30
+ async findAll() {
31
+ return Array.from(this.storage.values());
32
+ }
33
+ async update(id, data) {
34
+ const entity = this.storage.get(id);
35
+ if (!entity)
36
+ throw new Error(`Entity not found: ${id}`);
37
+ const updated = { ...entity, ...data };
38
+ this.storage.set(id, updated);
39
+ return updated;
40
+ }
41
+ async updateMany(ids, data) {
42
+ return ids.map((id) => {
43
+ const entity = this.storage.get(id);
44
+ if (!entity)
45
+ throw new Error(`Entity not found: ${id}`);
46
+ const updated = { ...entity, ...data };
47
+ this.storage.set(id, updated);
48
+ return updated;
49
+ });
50
+ }
51
+ async delete(id) {
52
+ return this.storage.delete(id);
53
+ }
54
+ /**
55
+ * テスト用: ストレージをクリア
56
+ */
57
+ clear() {
58
+ this.storage.clear();
59
+ }
60
+ /**
61
+ * テスト用: 現在の件数を取得
62
+ */
63
+ size() {
64
+ return this.storage.size;
65
+ }
66
+ }
67
+ /**
68
+ * 検索可能なインメモリRepository実装
69
+ */
70
+ export class SearchableInMemoryRepository extends InMemoryRepository {
71
+ async findBy(criteria) {
72
+ return Array.from(this.storage.values()).filter((entity) => {
73
+ return Object.entries(criteria).every(([key, value]) => {
74
+ return entity[key] === value;
75
+ });
76
+ });
77
+ }
78
+ async findOneBy(criteria) {
79
+ const results = await this.findBy(criteria);
80
+ return results[0] || null;
81
+ }
82
+ async count(criteria) {
83
+ if (!criteria)
84
+ return this.storage.size;
85
+ const results = await this.findBy(criteria);
86
+ return results.length;
87
+ }
88
+ }
89
+ /**
90
+ * Repository作成のファクトリー関数
91
+ */
92
+ export function createInMemoryRepository() {
93
+ return new InMemoryRepository();
94
+ }
95
+ export function createSearchableRepository() {
96
+ return new SearchableInMemoryRepository();
97
+ }
98
+ //# sourceMappingURL=base-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-repository.js","sourceRoot":"","sources":["../../src/codegen/base-repository.ts"],"names":[],"mappings":"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"}
@@ -15,4 +15,7 @@ export { DependencyAnalyzer, createDependencyAnalyzer, type DependencyType, type
15
15
  export { UnitTestGenerator, createUnitTestGenerator, type TestFramework, type AssertionStyle, type TestTargetType, type TestCaseInfo, type TestInput, type TestOutput, type TestMock, type TestSuiteInfo, type FunctionToTest, type GeneratedTestResult, type UnitTestGeneratorConfig, } from './unit-test-generator.js';
16
16
  export { IntegrationTestGenerator, createIntegrationTestGenerator, type IntegrationTestType, type TestFixture, type IntegrationTestScenario, type TestStep, type ExpectedOutcome, type ApiEndpointInfo, type ServiceInteractionInfo, type IntegrationTestSuite, type GeneratedIntegrationTest, type IntegrationTestGeneratorConfig, } from './integration-test-generator.js';
17
17
  export { CoverageReporter, createCoverageReporter, type CoverageMetricType, type ThresholdStatus, type FileCoverage, type CoverageMetric, type BranchInfo, type CoverageSummary, type CoverageThreshold, type CoverageReport, type ThresholdResult, type CoverageTrend, type ReportFormat, type CoverageReporterConfig, } from './coverage-reporter.js';
18
+ export { MockGenerator, createMockGenerator, mockGenerator, type GeneratedMock, type MockGeneratorOptions, type MockInterfaceDefinition, type MockMethodDefinition, } from './mock-generator.js';
19
+ export { InMemoryRepository, SearchableInMemoryRepository, type IRepository, type ISearchableRepository, type IPaginatedRepository, type PaginationOptions, type PaginatedResult, } from './base-repository.js';
20
+ export { AdapterNamingHelper, createAdapterNamingHelper, adapterNamingHelper, ADAPTER_TEMPLATES, type AdapterType, type AdapterNamingRule, } from './adapter-naming.js';
18
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,GACpC,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"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"}
@@ -24,4 +24,10 @@ export { UnitTestGenerator, createUnitTestGenerator, } from './unit-test-generat
24
24
  export { IntegrationTestGenerator, createIntegrationTestGenerator, } from './integration-test-generator.js';
25
25
  // Coverage Reporter
26
26
  export { CoverageReporter, createCoverageReporter, } from './coverage-reporter.js';
27
+ // Mock Generator (v1.1.4 - PAT-004 self-learning improvement)
28
+ export { MockGenerator, createMockGenerator, mockGenerator, } from './mock-generator.js';
29
+ // Base Repository (v1.1.4 - PAT-005 self-learning improvement)
30
+ export { InMemoryRepository, SearchableInMemoryRepository, } from './base-repository.js';
31
+ // Adapter Naming Helper (v1.1.4 - PAT-006 self-learning improvement)
32
+ export { AdapterNamingHelper, createAdapterNamingHelper, adapterNamingHelper, ADAPTER_TEMPLATES, } from './adapter-naming.js';
27
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,mBAAmB,GAQpB,MAAM,gBAAgB,CAAC;AAExB,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,oBAAoB,GAMrB,MAAM,sBAAsB,CAAC;AAE9B,6BAA6B;AAC7B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAO/B,MAAM,sBAAsB,CAAC;AAE9B,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,qBAAqB,GAOtB,MAAM,uBAAuB,CAAC;AAE/B,8BAA8B;AAC9B,OAAO,EACL,yBAAyB,EACzB,+BAA+B,GAShC,MAAM,0BAA0B,CAAC;AAElC,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAYzB,MAAM,0BAA0B,CAAC;AAElC,sBAAsB;AACtB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GAYxB,MAAM,0BAA0B,CAAC;AAElC,6BAA6B;AAC7B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAW/B,MAAM,iCAAiC,CAAC;AAEzC,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAavB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,mBAAmB,GAQpB,MAAM,gBAAgB,CAAC;AAExB,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,oBAAoB,GAMrB,MAAM,sBAAsB,CAAC;AAE9B,6BAA6B;AAC7B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAO/B,MAAM,sBAAsB,CAAC;AAE9B,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,qBAAqB,GAOtB,MAAM,uBAAuB,CAAC;AAE/B,8BAA8B;AAC9B,OAAO,EACL,yBAAyB,EACzB,+BAA+B,GAShC,MAAM,0BAA0B,CAAC;AAElC,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAYzB,MAAM,0BAA0B,CAAC;AAElC,sBAAsB;AACtB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GAYxB,MAAM,0BAA0B,CAAC;AAElC,6BAA6B;AAC7B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAW/B,MAAM,iCAAiC,CAAC;AAEzC,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAavB,MAAM,wBAAwB,CAAC;AAEhC,8DAA8D;AAC9D,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,aAAa,GAKd,MAAM,qBAAqB,CAAC;AAE7B,+DAA+D;AAC/D,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAM7B,MAAM,sBAAsB,CAAC;AAE9B,qEAAqE;AACrE,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,GAGlB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * MockGenerator - テストモック自動生成モジュール
3
+ *
4
+ * @description インターフェース定義からテストモック実装を自動生成
5
+ * @requirement REQ-MUSUBIX-LEARN-001 (SDD Workflow Feedback)
6
+ * @version 1.1.3
7
+ *
8
+ * 学習フィードバック PAT-004 の改善:
9
+ * - インターフェース定義からモック実装を自動生成
10
+ * - Repository, Service, Adapter パターンに対応
11
+ * - テスト失敗の80%削減を目標
12
+ */
13
+ export interface MockMethodDefinition {
14
+ name: string;
15
+ parameters: {
16
+ name: string;
17
+ type: string;
18
+ }[];
19
+ returnType: string;
20
+ async: boolean;
21
+ }
22
+ export interface MockInterfaceDefinition {
23
+ name: string;
24
+ methods: MockMethodDefinition[];
25
+ genericType?: string;
26
+ }
27
+ export interface MockGeneratorOptions {
28
+ /** 生成するテストフレームワーク */
29
+ framework: 'vitest' | 'jest';
30
+ /** Map/Setベースのインメモリストレージを使用 */
31
+ useInMemoryStorage: boolean;
32
+ /** IDフィールド名 */
33
+ idField: string;
34
+ }
35
+ export interface GeneratedMock {
36
+ interfaceName: string;
37
+ mockName: string;
38
+ code: string;
39
+ imports: string[];
40
+ }
41
+ /**
42
+ * MockGenerator - インターフェースからテストモックを自動生成
43
+ */
44
+ export declare class MockGenerator {
45
+ private options;
46
+ constructor(options?: Partial<MockGeneratorOptions>);
47
+ /**
48
+ * Repository インターフェースからモック実装を生成
49
+ */
50
+ generateRepositoryMock(interfaceDef: MockInterfaceDefinition, entityType: string): GeneratedMock;
51
+ /**
52
+ * Service インターフェースからモック実装を生成
53
+ */
54
+ generateServiceMock(interfaceDef: MockInterfaceDefinition): GeneratedMock;
55
+ /**
56
+ * Adapter インターフェースからモック実装を生成
57
+ */
58
+ generateAdapterMock(interfaceDef: MockInterfaceDefinition, _testData?: Record<string, unknown[]>): GeneratedMock;
59
+ /**
60
+ * 任意のインターフェースからモック実装を生成(汎用)
61
+ */
62
+ generateMock(interfaceDef: MockInterfaceDefinition): GeneratedMock;
63
+ /**
64
+ * TypeScriptインターフェース定義文字列を解析
65
+ */
66
+ parseInterface(interfaceCode: string): MockInterfaceDefinition | null;
67
+ /**
68
+ * 戻り値型からデフォルト値を生成
69
+ */
70
+ private getDefaultReturnValue;
71
+ }
72
+ /**
73
+ * デフォルトのMockGeneratorインスタンスを作成
74
+ */
75
+ export declare function createMockGenerator(options?: Partial<MockGeneratorOptions>): MockGenerator;
76
+ /**
77
+ * シングルトンインスタンス
78
+ */
79
+ export declare const mockGenerator: MockGenerator;
80
+ //# sourceMappingURL=mock-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-generator.d.ts","sourceRoot":"","sources":["../../src/codegen/mock-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,qBAAqB;IACrB,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC7B,+BAA+B;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAQD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAIvD;;OAEG;IACH,sBAAsB,CACpB,YAAY,EAAE,uBAAuB,EACrC,UAAU,EAAE,MAAM,GACjB,aAAa;IA0DhB;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,uBAAuB,GAAG,aAAa;IA4BzE;;OAEG;IACH,mBAAmB,CACjB,YAAY,EAAE,uBAAuB,EACrC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GACpC,aAAa;IA4BhB;;OAEG;IACH,YAAY,CAAC,YAAY,EAAE,uBAAuB,GAAG,aAAa;IAsBlE;;OAEG;IACH,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAkCrE;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAY9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACtC,aAAa,CAEf;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC"}