sdd-mcp-server 1.4.5 → 1.5.0

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,523 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { injectable, inject } from 'inversify';
14
+ import { v4 as uuidv4 } from 'uuid';
15
+ import { TYPES } from '../../infrastructure/di/types.js';
16
+ import { QuestionCategory } from '../../domain/types.js';
17
+ let RequirementsClarificationService = class RequirementsClarificationService {
18
+ fileSystem;
19
+ logger;
20
+ constructor(fileSystem, logger) {
21
+ this.fileSystem = fileSystem;
22
+ this.logger = logger;
23
+ }
24
+ /**
25
+ * Analyzes a project description to determine if clarification is needed
26
+ */
27
+ async analyzeDescription(description, projectPath) {
28
+ const correlationId = uuidv4();
29
+ this.logger.info('Analyzing project description for clarification needs', {
30
+ correlationId,
31
+ descriptionLength: description.length
32
+ });
33
+ // Load existing steering docs for context
34
+ const steeringContext = await this.loadSteeringContext(projectPath);
35
+ // Perform analysis
36
+ const analysis = this.performAnalysis(description, steeringContext);
37
+ this.logger.debug('Description analysis completed', {
38
+ correlationId,
39
+ qualityScore: analysis.qualityScore,
40
+ needsClarification: analysis.needsClarification
41
+ });
42
+ if (!analysis.needsClarification) {
43
+ return {
44
+ needsClarification: false,
45
+ analysis
46
+ };
47
+ }
48
+ // Generate clarification questions
49
+ const questions = this.generateQuestions(analysis, steeringContext);
50
+ return {
51
+ needsClarification: true,
52
+ questions,
53
+ analysis
54
+ };
55
+ }
56
+ /**
57
+ * Validates and processes clarification answers
58
+ */
59
+ validateAnswers(questions, answers) {
60
+ const missingRequired = [];
61
+ for (const question of questions) {
62
+ if (question.required && !answers[question.id]) {
63
+ missingRequired.push(question.question);
64
+ }
65
+ }
66
+ return {
67
+ valid: missingRequired.length === 0,
68
+ missingRequired
69
+ };
70
+ }
71
+ /**
72
+ * Synthesizes an enriched project description from original + answers
73
+ */
74
+ synthesizeDescription(originalDescription, questions, answers) {
75
+ const correlationId = uuidv4();
76
+ this.logger.info('Synthesizing enriched project description', {
77
+ correlationId,
78
+ questionCount: questions.length
79
+ });
80
+ // Extract answers by category
81
+ const why = this.extractAnswersByCategory(questions, answers, QuestionCategory.WHY);
82
+ const who = this.extractAnswersByCategory(questions, answers, QuestionCategory.WHO);
83
+ const what = this.extractAnswersByCategory(questions, answers, QuestionCategory.WHAT);
84
+ const how = this.extractAnswersByCategory(questions, answers, QuestionCategory.HOW);
85
+ const successCriteria = this.extractAnswersByCategory(questions, answers, QuestionCategory.SUCCESS);
86
+ // Build enriched description
87
+ const enriched = this.buildEnrichedDescription({
88
+ original: originalDescription,
89
+ why,
90
+ who,
91
+ what,
92
+ how,
93
+ successCriteria
94
+ });
95
+ return {
96
+ original: originalDescription,
97
+ why,
98
+ who,
99
+ what,
100
+ how: how || undefined,
101
+ successCriteria,
102
+ enriched
103
+ };
104
+ }
105
+ /**
106
+ * Performs the core analysis of the description
107
+ */
108
+ performAnalysis(description, steeringContext) {
109
+ const missingElements = [];
110
+ const ambiguousTerms = [];
111
+ // Check for WHY (business justification, problem statement)
112
+ const hasWhy = this.detectWhy(description);
113
+ if (!hasWhy && !steeringContext.hasProductContext) {
114
+ missingElements.push('Business justification or problem statement (WHY)');
115
+ }
116
+ // Check for WHO (target users)
117
+ const hasWho = this.detectWho(description);
118
+ if (!hasWho && !steeringContext.hasTargetUsers) {
119
+ missingElements.push('Target users or personas (WHO)');
120
+ }
121
+ // Check for WHAT (core features, scope)
122
+ const hasWhat = this.detectWhat(description);
123
+ if (!hasWhat) {
124
+ missingElements.push('Core features or scope definition (WHAT)');
125
+ }
126
+ // Check for success criteria
127
+ const hasSuccessCriteria = this.detectSuccessCriteria(description);
128
+ if (!hasSuccessCriteria) {
129
+ missingElements.push('Success criteria or metrics');
130
+ }
131
+ // Detect ambiguous terms
132
+ ambiguousTerms.push(...this.detectAmbiguousTerms(description));
133
+ // Calculate quality score (0-100)
134
+ const qualityScore = this.calculateQualityScore({
135
+ hasWhy,
136
+ hasWho,
137
+ hasWhat,
138
+ hasSuccessCriteria,
139
+ ambiguousTermCount: ambiguousTerms.length,
140
+ descriptionLength: description.length
141
+ });
142
+ // Need clarification if score < 70 or missing critical elements
143
+ const needsClarification = qualityScore < 70 || missingElements.length > 0;
144
+ return {
145
+ qualityScore,
146
+ missingElements,
147
+ ambiguousTerms,
148
+ needsClarification,
149
+ hasWhy,
150
+ hasWho,
151
+ hasWhat,
152
+ hasSuccessCriteria
153
+ };
154
+ }
155
+ /**
156
+ * Generates targeted clarification questions based on analysis
157
+ */
158
+ generateQuestions(analysis, steeringContext) {
159
+ const questions = [];
160
+ // WHY questions - always high priority
161
+ if (!analysis.hasWhy && !steeringContext.hasProductContext) {
162
+ questions.push({
163
+ id: uuidv4(),
164
+ category: QuestionCategory.WHY,
165
+ question: 'What business problem does this project solve? Why is it needed?',
166
+ why: 'Understanding the business justification ensures we build the right solution',
167
+ examples: [
168
+ 'Our customer support team spends 5 hours/day on repetitive inquiries',
169
+ 'Users are abandoning checkout because the process takes too long',
170
+ 'Developers waste time searching for undocumented APIs'
171
+ ],
172
+ required: true
173
+ });
174
+ questions.push({
175
+ id: uuidv4(),
176
+ category: QuestionCategory.WHY,
177
+ question: 'What value does this project provide to users or the business?',
178
+ why: 'Clarifying value proposition helps prioritize features and measure success',
179
+ examples: [
180
+ 'Reduce support ticket volume by 40%',
181
+ 'Increase conversion rate by improving checkout speed',
182
+ 'Save developers 2 hours/week with better documentation'
183
+ ],
184
+ required: true
185
+ });
186
+ }
187
+ // WHO questions
188
+ if (!analysis.hasWho && !steeringContext.hasTargetUsers) {
189
+ questions.push({
190
+ id: uuidv4(),
191
+ category: QuestionCategory.WHO,
192
+ question: 'Who are the primary users of this project?',
193
+ why: 'Knowing the target users shapes UX, features, and technical decisions',
194
+ examples: [
195
+ 'Customer support agents using ticketing systems',
196
+ 'E-commerce shoppers on mobile devices',
197
+ 'Backend developers integrating APIs'
198
+ ],
199
+ required: true
200
+ });
201
+ }
202
+ // WHAT questions
203
+ if (!analysis.hasWhat) {
204
+ questions.push({
205
+ id: uuidv4(),
206
+ category: QuestionCategory.WHAT,
207
+ question: 'What are the 3-5 core features for the MVP?',
208
+ why: 'Defining MVP scope prevents scope creep and ensures focused delivery',
209
+ examples: [
210
+ 'Auto-response system, ticket categorization, analytics dashboard',
211
+ 'Product search, cart management, payment integration',
212
+ 'API explorer, code examples, interactive documentation'
213
+ ],
214
+ required: true
215
+ });
216
+ questions.push({
217
+ id: uuidv4(),
218
+ category: QuestionCategory.WHAT,
219
+ question: 'What is explicitly OUT OF SCOPE for this project?',
220
+ why: 'Boundary definition prevents feature creep and manages expectations',
221
+ examples: [
222
+ 'Admin panel (future phase)',
223
+ 'Mobile app (web only for MVP)',
224
+ 'Multi-language support (English only initially)'
225
+ ],
226
+ required: false
227
+ });
228
+ }
229
+ // SUCCESS questions
230
+ if (!analysis.hasSuccessCriteria) {
231
+ questions.push({
232
+ id: uuidv4(),
233
+ category: QuestionCategory.SUCCESS,
234
+ question: 'How will you measure if this project is successful?',
235
+ why: 'Quantifiable metrics enable objective evaluation and iteration',
236
+ examples: [
237
+ 'Support ticket volume reduced by 30% within 3 months',
238
+ 'Page load time under 2 seconds, conversion rate > 3%',
239
+ 'API documentation rated 4.5/5 stars by developers'
240
+ ],
241
+ required: true
242
+ });
243
+ }
244
+ // HOW questions (technical approach) - only if no tech steering
245
+ if (!steeringContext.hasTechContext) {
246
+ questions.push({
247
+ id: uuidv4(),
248
+ category: QuestionCategory.HOW,
249
+ question: 'Are there any technical constraints or preferences? (language, platform, existing systems)',
250
+ why: 'Technical constraints shape architecture and technology choices',
251
+ examples: [
252
+ 'Must integrate with existing Salesforce CRM',
253
+ 'TypeScript + React preferred, hosted on AWS',
254
+ 'Python-based, needs to run on-premise'
255
+ ],
256
+ required: false
257
+ });
258
+ }
259
+ // Ambiguity clarification
260
+ for (const ambiguous of analysis.ambiguousTerms.slice(0, 3)) {
261
+ questions.push({
262
+ id: uuidv4(),
263
+ category: QuestionCategory.WHAT,
264
+ question: `You mentioned "${ambiguous.term}". ${ambiguous.suggestion}`,
265
+ why: 'Removing ambiguity ensures shared understanding',
266
+ examples: ambiguous.context ? [ambiguous.context] : undefined,
267
+ required: false
268
+ });
269
+ }
270
+ return questions;
271
+ }
272
+ /**
273
+ * Load steering documents for context
274
+ */
275
+ async loadSteeringContext(projectPath) {
276
+ if (!projectPath) {
277
+ return {
278
+ hasProductContext: false,
279
+ hasTargetUsers: false,
280
+ hasTechContext: false
281
+ };
282
+ }
283
+ const context = {
284
+ hasProductContext: false,
285
+ hasTargetUsers: false,
286
+ hasTechContext: false
287
+ };
288
+ try {
289
+ // Check product.md
290
+ const productPath = `${projectPath}/.kiro/steering/product.md`;
291
+ if (await this.fileSystem.exists(productPath)) {
292
+ const productContent = await this.fileSystem.readFile(productPath);
293
+ context.hasProductContext = productContent.length > 200; // Has substantial content
294
+ context.hasTargetUsers = /target\s+users|user\s+persona/i.test(productContent);
295
+ }
296
+ // Check tech.md
297
+ const techPath = `${projectPath}/.kiro/steering/tech.md`;
298
+ if (await this.fileSystem.exists(techPath)) {
299
+ const techContent = await this.fileSystem.readFile(techPath);
300
+ context.hasTechContext = techContent.length > 200;
301
+ }
302
+ }
303
+ catch (error) {
304
+ this.logger.warn('Failed to load steering context', {
305
+ error: error.message
306
+ });
307
+ }
308
+ return context;
309
+ }
310
+ /**
311
+ * Detects if description contains WHY (business justification)
312
+ */
313
+ detectWhy(description) {
314
+ const whyPatterns = [
315
+ /\bproblem\b/i,
316
+ /\bsolve[sd]?\b/i,
317
+ /\bchallenge\b/i,
318
+ /\bpain\s+point/i,
319
+ /\bissue\b/i,
320
+ /\bwhy\b/i,
321
+ /\bbecause\b/i,
322
+ /\benables?\b/i,
323
+ /\bvalue\s+proposition/i,
324
+ /\bbenefit/i,
325
+ /\bjustification/i,
326
+ /\bgoal\b/i,
327
+ /\bobjective\b/i,
328
+ /\bpurpose\b/i
329
+ ];
330
+ return whyPatterns.some(pattern => pattern.test(description));
331
+ }
332
+ /**
333
+ * Detects if description contains WHO (target users)
334
+ */
335
+ detectWho(description) {
336
+ const whoPatterns = [
337
+ /\buser[s]?\b/i,
338
+ /\bcustomer[s]?\b/i,
339
+ /\btarget\s+(audience|users?|customers?)/i,
340
+ /\bpersona[s]?\b/i,
341
+ /\bstakeholder[s]?\b/i,
342
+ /\b(developer|designer|admin|manager)[s]?\b/i,
343
+ /\bfor\s+(teams?|companies|individuals)/i
344
+ ];
345
+ return whoPatterns.some(pattern => pattern.test(description));
346
+ }
347
+ /**
348
+ * Detects if description contains WHAT (features, scope)
349
+ */
350
+ detectWhat(description) {
351
+ const whatPatterns = [
352
+ /\bfeature[s]?\b/i,
353
+ /\bfunctionality\b/i,
354
+ /\bcapabilit(y|ies)/i,
355
+ /\bprovides?\b/i,
356
+ /\binclude[s]?\b/i,
357
+ /\bsupport[s]?\b/i,
358
+ /\ballow[s]?\b/i,
359
+ /\benable[s]?\b/i,
360
+ /\bMVP\b/i,
361
+ /\bscope\b/i
362
+ ];
363
+ return whatPatterns.some(pattern => pattern.test(description));
364
+ }
365
+ /**
366
+ * Detects if description contains success criteria
367
+ */
368
+ detectSuccessCriteria(description) {
369
+ const successPatterns = [
370
+ /\bmetric[s]?\b/i,
371
+ /\bKPI[s]?\b/i,
372
+ /\bmeasure[sd]?\b/i,
373
+ /\bsuccess\s+(criteria|metric)/i,
374
+ /\b\d+%/,
375
+ /\bperformance\s+target/i,
376
+ /\bgoal[s]?\b.*\d+/i
377
+ ];
378
+ return successPatterns.some(pattern => pattern.test(description));
379
+ }
380
+ /**
381
+ * Detects ambiguous terms that need clarification
382
+ */
383
+ detectAmbiguousTerms(description) {
384
+ const ambiguousTerms = [];
385
+ const ambiguityMap = [
386
+ {
387
+ pattern: /\bfast\b/gi,
388
+ suggestion: 'Can you specify a target response time? (e.g., "< 200ms API response", "page loads in 2s")'
389
+ },
390
+ {
391
+ pattern: /\bscalable\b/gi,
392
+ suggestion: 'What scale do you need to support? (e.g., "1000 concurrent users", "100k requests/hour")'
393
+ },
394
+ {
395
+ pattern: /\buser[- ]friendly\b/gi,
396
+ suggestion: 'What makes it user-friendly? (e.g., "3-click checkout", "mobile-responsive", "keyboard shortcuts")'
397
+ },
398
+ {
399
+ pattern: /\beasy\s+to\s+use\b/gi,
400
+ suggestion: 'What does easy mean for your users? (e.g., "no training required", "5-minute onboarding", "intuitive navigation")'
401
+ },
402
+ {
403
+ pattern: /\bhigh\s+quality\b/gi,
404
+ suggestion: 'How do you define quality? (e.g., "zero critical bugs in production", "90% test coverage", "< 5% error rate")'
405
+ },
406
+ {
407
+ pattern: /\breliable\b/gi,
408
+ suggestion: 'What reliability level do you need? (e.g., "99.9% uptime", "zero data loss", "automatic failover")'
409
+ },
410
+ {
411
+ pattern: /\bsecure\b/gi,
412
+ suggestion: 'What security requirements apply? (e.g., "SOC 2 compliant", "end-to-end encryption", "OAuth 2.0")'
413
+ },
414
+ {
415
+ pattern: /\bmodern\b/gi,
416
+ suggestion: 'What technologies or approaches are you considering? (e.g., "React + TypeScript", "microservices", "serverless")'
417
+ }
418
+ ];
419
+ for (const { pattern, suggestion } of ambiguityMap) {
420
+ const matches = description.match(pattern);
421
+ if (matches) {
422
+ for (const match of matches) {
423
+ const context = this.extractContext(description, match);
424
+ ambiguousTerms.push({
425
+ term: match,
426
+ context,
427
+ suggestion
428
+ });
429
+ }
430
+ }
431
+ }
432
+ return ambiguousTerms;
433
+ }
434
+ /**
435
+ * Extracts surrounding context for an ambiguous term
436
+ */
437
+ extractContext(text, term) {
438
+ const index = text.toLowerCase().indexOf(term.toLowerCase());
439
+ if (index === -1)
440
+ return '';
441
+ const start = Math.max(0, index - 30);
442
+ const end = Math.min(text.length, index + term.length + 30);
443
+ return '...' + text.slice(start, end).trim() + '...';
444
+ }
445
+ /**
446
+ * Calculates quality score based on completeness and clarity
447
+ */
448
+ calculateQualityScore(metrics) {
449
+ let score = 0;
450
+ // WHY is most important (30 points)
451
+ if (metrics.hasWhy)
452
+ score += 30;
453
+ // WHO is critical (20 points)
454
+ if (metrics.hasWho)
455
+ score += 20;
456
+ // WHAT is essential (20 points)
457
+ if (metrics.hasWhat)
458
+ score += 20;
459
+ // Success criteria (15 points)
460
+ if (metrics.hasSuccessCriteria)
461
+ score += 15;
462
+ // Penalize ambiguous terms (up to -15 points)
463
+ const ambiguityPenalty = Math.min(15, metrics.ambiguousTermCount * 5);
464
+ score -= ambiguityPenalty;
465
+ // Length bonus (up to 15 points) - adequate detail
466
+ if (metrics.descriptionLength > 100)
467
+ score += 5;
468
+ if (metrics.descriptionLength > 300)
469
+ score += 5;
470
+ if (metrics.descriptionLength > 500)
471
+ score += 5;
472
+ return Math.max(0, Math.min(100, score));
473
+ }
474
+ /**
475
+ * Extracts answers for a specific category
476
+ */
477
+ extractAnswersByCategory(questions, answers, category) {
478
+ const categoryQuestions = questions.filter(q => q.category === category);
479
+ const categoryAnswers = categoryQuestions
480
+ .map(q => answers[q.id])
481
+ .filter(a => a && a.trim().length > 0);
482
+ return categoryAnswers.join(' ');
483
+ }
484
+ /**
485
+ * Builds the enriched description from all components
486
+ */
487
+ buildEnrichedDescription(components) {
488
+ const parts = [];
489
+ // Start with original if it has content
490
+ if (components.original && components.original.trim().length > 0) {
491
+ parts.push(`## Original Description\n${components.original}`);
492
+ }
493
+ // Add WHY
494
+ if (components.why) {
495
+ parts.push(`## Business Justification (Why)\n${components.why}`);
496
+ }
497
+ // Add WHO
498
+ if (components.who) {
499
+ parts.push(`## Target Users (Who)\n${components.who}`);
500
+ }
501
+ // Add WHAT
502
+ if (components.what) {
503
+ parts.push(`## Core Features (What)\n${components.what}`);
504
+ }
505
+ // Add HOW (optional)
506
+ if (components.how) {
507
+ parts.push(`## Technical Approach (How)\n${components.how}`);
508
+ }
509
+ // Add success criteria
510
+ if (components.successCriteria) {
511
+ parts.push(`## Success Criteria\n${components.successCriteria}`);
512
+ }
513
+ return parts.join('\n\n');
514
+ }
515
+ };
516
+ RequirementsClarificationService = __decorate([
517
+ injectable(),
518
+ __param(0, inject(TYPES.FileSystemPort)),
519
+ __param(1, inject(TYPES.LoggerPort)),
520
+ __metadata("design:paramtypes", [Object, Object])
521
+ ], RequirementsClarificationService);
522
+ export { RequirementsClarificationService };
523
+ //# sourceMappingURL=RequirementsClarificationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequirementsClarificationService.js","sourceRoot":"","sources":["../../../src/application/services/RequirementsClarificationService.ts"],"names":[],"mappings":"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"}
@@ -113,3 +113,50 @@ export interface CodeLocation {
113
113
  readonly line: number;
114
114
  readonly column: number;
115
115
  }
116
+ export interface ClarificationQuestion {
117
+ readonly id: string;
118
+ readonly category: QuestionCategory;
119
+ readonly question: string;
120
+ readonly why: string;
121
+ readonly examples?: string[];
122
+ readonly required: boolean;
123
+ }
124
+ export declare enum QuestionCategory {
125
+ WHY = "why",// Business justification, problem being solved
126
+ WHO = "who",// Target users, personas, stakeholders
127
+ WHAT = "what",// Core features, scope, MVP
128
+ HOW = "how",// Technical approach, architecture
129
+ SUCCESS = "success"
130
+ }
131
+ export interface ClarificationAnalysis {
132
+ readonly qualityScore: number;
133
+ readonly missingElements: string[];
134
+ readonly ambiguousTerms: AmbiguousTerm[];
135
+ readonly needsClarification: boolean;
136
+ readonly hasWhy: boolean;
137
+ readonly hasWho: boolean;
138
+ readonly hasWhat: boolean;
139
+ readonly hasSuccessCriteria: boolean;
140
+ }
141
+ export interface AmbiguousTerm {
142
+ readonly term: string;
143
+ readonly context: string;
144
+ readonly suggestion: string;
145
+ }
146
+ export interface EnrichedProjectDescription {
147
+ readonly original: string;
148
+ readonly why: string;
149
+ readonly who: string;
150
+ readonly what: string;
151
+ readonly how?: string;
152
+ readonly successCriteria: string;
153
+ readonly constraints?: string;
154
+ readonly assumptions?: string;
155
+ readonly enriched: string;
156
+ }
157
+ export interface ClarificationResult {
158
+ readonly needsClarification: boolean;
159
+ readonly questions?: ClarificationQuestion[];
160
+ readonly analysis?: ClarificationAnalysis;
161
+ readonly enrichedDescription?: EnrichedProjectDescription;
162
+ }
@@ -34,4 +34,12 @@ export var IssueSeverity;
34
34
  IssueSeverity["WARNING"] = "warning";
35
35
  IssueSeverity["INFO"] = "info";
36
36
  })(IssueSeverity || (IssueSeverity = {}));
37
+ export var QuestionCategory;
38
+ (function (QuestionCategory) {
39
+ QuestionCategory["WHY"] = "why";
40
+ QuestionCategory["WHO"] = "who";
41
+ QuestionCategory["WHAT"] = "what";
42
+ QuestionCategory["HOW"] = "how";
43
+ QuestionCategory["SUCCESS"] = "success";
44
+ })(QuestionCategory || (QuestionCategory = {}));
37
45
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":"AAAA,qCAAqC;AA4BrC,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,wDAAuC,CAAA;IACvC,4CAA2B,CAAA;IAC3B,0CAAyB,CAAA;IACzB,wDAAuC,CAAA;AACzC,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAED,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,4CAA2B,CAAA;IAC3B,wCAAuB,CAAA;IACvB,gCAAe,CAAA;AACjB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAgED,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AASD,MAAM,CAAN,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,sCAAyB,CAAA;IACzB,0CAA6B,CAAA;IAC7B,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,0CAA6B,CAAA;AAC/B,CAAC,EANW,SAAS,KAAT,SAAS,QAMpB;AAED,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,oCAAmB,CAAA;IACnB,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":"AAAA,qCAAqC;AA4BrC,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,wDAAuC,CAAA;IACvC,4CAA2B,CAAA;IAC3B,0CAAyB,CAAA;IACzB,wDAAuC,CAAA;AACzC,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAED,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,4CAA2B,CAAA;IAC3B,wCAAuB,CAAA;IACvB,gCAAe,CAAA;AACjB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAgED,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AASD,MAAM,CAAN,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,sCAAyB,CAAA;IACzB,0CAA6B,CAAA;IAC7B,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,0CAA6B,CAAA;AAC/B,CAAC,EANW,SAAS,KAAT,SAAS,QAMpB;AAED,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,oCAAmB,CAAA;IACnB,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAmBD,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,+BAAW,CAAA;IACX,iCAAa,CAAA;IACb,+BAAW,CAAA;IACX,uCAAmB,CAAA;AACrB,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B"}
@@ -1,3 +1,3 @@
1
- import 'reflect-metadata';
2
- import { Container } from 'inversify';
1
+ import "reflect-metadata";
2
+ import { Container } from "inversify";
3
3
  export declare function createContainer(): Container;