@evolith/smart-cli 0.0.1-beta
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/ARCHITECTURE.md +121 -0
- package/README.es.md +425 -0
- package/README.md +419 -0
- package/dist/app.module.d.ts +2 -0
- package/dist/app.module.js +59 -0
- package/dist/app.module.js.map +1 -0
- package/dist/application/services/index.d.ts +54 -0
- package/dist/application/services/index.js +307 -0
- package/dist/application/services/index.js.map +1 -0
- package/dist/application/services/services.test.d.ts +1 -0
- package/dist/application/services/services.test.js +176 -0
- package/dist/application/services/services.test.js.map +1 -0
- package/dist/application/use-cases/validate-satellite.use-case.d.ts +18 -0
- package/dist/application/use-cases/validate-satellite.use-case.js +92 -0
- package/dist/application/use-cases/validate-satellite.use-case.js.map +1 -0
- package/dist/application/use-cases/validate-satellite.use-case.spec.d.ts +1 -0
- package/dist/application/use-cases/validate-satellite.use-case.spec.js +102 -0
- package/dist/application/use-cases/validate-satellite.use-case.spec.js.map +1 -0
- package/dist/commands/adr/adr.command.d.ts +28 -0
- package/dist/commands/adr/adr.command.js +357 -0
- package/dist/commands/adr/adr.command.js.map +1 -0
- package/dist/commands/architecture/scaffold.command.d.ts +7 -0
- package/dist/commands/architecture/scaffold.command.js +162 -0
- package/dist/commands/architecture/scaffold.command.js.map +1 -0
- package/dist/commands/commands.test.d.ts +1 -0
- package/dist/commands/commands.test.js +131 -0
- package/dist/commands/commands.test.js.map +1 -0
- package/dist/commands/completion/completion.command.d.ts +20 -0
- package/dist/commands/completion/completion.command.js +215 -0
- package/dist/commands/completion/completion.command.js.map +1 -0
- package/dist/commands/docs/docs.command.d.ts +9 -0
- package/dist/commands/docs/docs.command.js +77 -0
- package/dist/commands/docs/docs.command.js.map +1 -0
- package/dist/commands/history/history.command.d.ts +29 -0
- package/dist/commands/history/history.command.js +268 -0
- package/dist/commands/history/history.command.js.map +1 -0
- package/dist/commands/init/agents.command.d.ts +22 -0
- package/dist/commands/init/agents.command.js +502 -0
- package/dist/commands/init/agents.command.js.map +1 -0
- package/dist/commands/init/init.command.d.ts +20 -0
- package/dist/commands/init/init.command.js +329 -0
- package/dist/commands/init/init.command.js.map +1 -0
- package/dist/commands/init/upgrade.command.d.ts +9 -0
- package/dist/commands/init/upgrade.command.js +77 -0
- package/dist/commands/init/upgrade.command.js.map +1 -0
- package/dist/commands/mcp/mcp-serve.command.d.ts +15 -0
- package/dist/commands/mcp/mcp-serve.command.js +106 -0
- package/dist/commands/mcp/mcp-serve.command.js.map +1 -0
- package/dist/commands/sdlc/generate-domain.command.d.ts +5 -0
- package/dist/commands/sdlc/generate-domain.command.js +55 -0
- package/dist/commands/sdlc/generate-domain.command.js.map +1 -0
- package/dist/commands/sdlc/handoff.command.d.ts +22 -0
- package/dist/commands/sdlc/handoff.command.js +273 -0
- package/dist/commands/sdlc/handoff.command.js.map +1 -0
- package/dist/commands/sdlc/sdlc.command.d.ts +4 -0
- package/dist/commands/sdlc/sdlc.command.js +34 -0
- package/dist/commands/sdlc/sdlc.command.js.map +1 -0
- package/dist/commands/standards/standards.command.d.ts +27 -0
- package/dist/commands/standards/standards.command.js +308 -0
- package/dist/commands/standards/standards.command.js.map +1 -0
- package/dist/commands/validate/validate.command.d.ts +19 -0
- package/dist/commands/validate/validate.command.js +231 -0
- package/dist/commands/validate/validate.command.js.map +1 -0
- package/dist/config/runtimes.json +196 -0
- package/dist/config/tool-catalog.json +343 -0
- package/dist/core/abstractions/index.d.ts +6 -0
- package/dist/core/abstractions/index.js +23 -0
- package/dist/core/abstractions/index.js.map +1 -0
- package/dist/core/abstractions/interfaces.d.ts +60 -0
- package/dist/core/abstractions/interfaces.js +5 -0
- package/dist/core/abstractions/interfaces.js.map +1 -0
- package/dist/core/abstractions/providers/config-parser.provider.d.ts +15 -0
- package/dist/core/abstractions/providers/config-parser.provider.js +68 -0
- package/dist/core/abstractions/providers/config-parser.provider.js.map +1 -0
- package/dist/core/abstractions/providers/logger.provider.d.ts +10 -0
- package/dist/core/abstractions/providers/logger.provider.js +84 -0
- package/dist/core/abstractions/providers/logger.provider.js.map +1 -0
- package/dist/core/abstractions/providers/mock-filesystem.provider.d.ts +30 -0
- package/dist/core/abstractions/providers/mock-filesystem.provider.js +122 -0
- package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +1 -0
- package/dist/core/abstractions/providers/node-filesystem.provider.d.ts +19 -0
- package/dist/core/abstractions/providers/node-filesystem.provider.js +104 -0
- package/dist/core/abstractions/providers/node-filesystem.provider.js.map +1 -0
- package/dist/core/architecture/nx-workspace.strategy.d.ts +11 -0
- package/dist/core/architecture/nx-workspace.strategy.js +107 -0
- package/dist/core/architecture/nx-workspace.strategy.js.map +1 -0
- package/dist/core/architecture/workspace-manager.strategy.d.ts +7 -0
- package/dist/core/architecture/workspace-manager.strategy.js +3 -0
- package/dist/core/architecture/workspace-manager.strategy.js.map +1 -0
- package/dist/core/config/config.service.d.ts +15 -0
- package/dist/core/config/config.service.js +55 -0
- package/dist/core/config/config.service.js.map +1 -0
- package/dist/core/config/config.service.spec.d.ts +1 -0
- package/dist/core/config/config.service.spec.js +43 -0
- package/dist/core/config/config.service.spec.js.map +1 -0
- package/dist/core/di/container.d.ts +25 -0
- package/dist/core/di/container.js +87 -0
- package/dist/core/di/container.js.map +1 -0
- package/dist/core/di/container.spec.d.ts +1 -0
- package/dist/core/di/container.spec.js +137 -0
- package/dist/core/di/container.spec.js.map +1 -0
- package/dist/core/errors/index.d.ts +26 -0
- package/dist/core/errors/index.js +67 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/filesystem/file-manager.service.d.ts +4 -0
- package/dist/core/filesystem/file-manager.service.js +96 -0
- package/dist/core/filesystem/file-manager.service.js.map +1 -0
- package/dist/core/filesystem/file-manager.service.spec.d.ts +1 -0
- package/dist/core/filesystem/file-manager.service.spec.js +103 -0
- package/dist/core/filesystem/file-manager.service.spec.js.map +1 -0
- package/dist/core/mcp/mcp-server.service.d.ts +7 -0
- package/dist/core/mcp/mcp-server.service.js +31 -0
- package/dist/core/mcp/mcp-server.service.js.map +1 -0
- package/dist/core/mcp/metrics.service.d.ts +37 -0
- package/dist/core/mcp/metrics.service.js +72 -0
- package/dist/core/mcp/metrics.service.js.map +1 -0
- package/dist/core/mcp/prompts/index.d.ts +22 -0
- package/dist/core/mcp/prompts/index.js +175 -0
- package/dist/core/mcp/prompts/index.js.map +1 -0
- package/dist/core/mcp/resources/index.d.ts +11 -0
- package/dist/core/mcp/resources/index.js +193 -0
- package/dist/core/mcp/resources/index.js.map +1 -0
- package/dist/core/mcp/server.d.ts +25 -0
- package/dist/core/mcp/server.js +413 -0
- package/dist/core/mcp/server.js.map +1 -0
- package/dist/core/mcp/tools/agent.d.ts +41 -0
- package/dist/core/mcp/tools/agent.js +195 -0
- package/dist/core/mcp/tools/agent.js.map +1 -0
- package/dist/core/mcp/tools/architecture.d.ts +27 -0
- package/dist/core/mcp/tools/architecture.js +166 -0
- package/dist/core/mcp/tools/architecture.js.map +1 -0
- package/dist/core/mcp/tools/sdlc.d.ts +32 -0
- package/dist/core/mcp/tools/sdlc.js +189 -0
- package/dist/core/mcp/tools/sdlc.js.map +1 -0
- package/dist/core/mcp/tools/tool-utils.d.ts +4 -0
- package/dist/core/mcp/tools/tool-utils.js +18 -0
- package/dist/core/mcp/tools/tool-utils.js.map +1 -0
- package/dist/core/mcp/tools/validate.d.ts +18 -0
- package/dist/core/mcp/tools/validate.js +56 -0
- package/dist/core/mcp/tools/validate.js.map +1 -0
- package/dist/core/mcp/watcher.service.d.ts +8 -0
- package/dist/core/mcp/watcher.service.js +82 -0
- package/dist/core/mcp/watcher.service.js.map +1 -0
- package/dist/core/mcp/watcher.service.spec.d.ts +1 -0
- package/dist/core/mcp/watcher.service.spec.js +70 -0
- package/dist/core/mcp/watcher.service.spec.js.map +1 -0
- package/dist/core/observability/command-watcher.d.ts +45 -0
- package/dist/core/observability/command-watcher.js +168 -0
- package/dist/core/observability/command-watcher.js.map +1 -0
- package/dist/core/observability/error-reporter.d.ts +47 -0
- package/dist/core/observability/error-reporter.js +163 -0
- package/dist/core/observability/error-reporter.js.map +1 -0
- package/dist/core/observability/index.d.ts +4 -0
- package/dist/core/observability/index.js +24 -0
- package/dist/core/observability/index.js.map +1 -0
- package/dist/core/observability/observability.test.d.ts +1 -0
- package/dist/core/observability/observability.test.js +224 -0
- package/dist/core/observability/observability.test.js.map +1 -0
- package/dist/core/observability/structured-logger.d.ts +53 -0
- package/dist/core/observability/structured-logger.js +123 -0
- package/dist/core/observability/structured-logger.js.map +1 -0
- package/dist/core/observability/timing.d.ts +23 -0
- package/dist/core/observability/timing.js +140 -0
- package/dist/core/observability/timing.js.map +1 -0
- package/dist/core/services/command-executor.service.d.ts +3 -0
- package/dist/core/services/command-executor.service.js +12 -0
- package/dist/core/services/command-executor.service.js.map +1 -0
- package/dist/core/services/command-history.service.d.ts +38 -0
- package/dist/core/services/command-history.service.js +146 -0
- package/dist/core/services/command-history.service.js.map +1 -0
- package/dist/core/services/command-providers.d.ts +1 -0
- package/dist/core/services/command-providers.js +17 -0
- package/dist/core/services/command-providers.js.map +1 -0
- package/dist/core/services/runtime-catalog.service.d.ts +2 -0
- package/dist/core/services/runtime-catalog.service.js +7 -0
- package/dist/core/services/runtime-catalog.service.js.map +1 -0
- package/dist/core/sync/sync.service.d.ts +4 -0
- package/dist/core/sync/sync.service.js +81 -0
- package/dist/core/sync/sync.service.js.map +1 -0
- package/dist/core/sync/sync.service.spec.d.ts +1 -0
- package/dist/core/sync/sync.service.spec.js +63 -0
- package/dist/core/sync/sync.service.spec.js.map +1 -0
- package/dist/core/validators/ruleset-validator.service.d.ts +56 -0
- package/dist/core/validators/ruleset-validator.service.js +263 -0
- package/dist/core/validators/ruleset-validator.service.js.map +1 -0
- package/dist/core/validators/ruleset-validator.service.spec.d.ts +1 -0
- package/dist/core/validators/ruleset-validator.service.spec.js +121 -0
- package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -0
- package/dist/domain/entities/index.d.ts +72 -0
- package/dist/domain/entities/index.js +119 -0
- package/dist/domain/entities/index.js.map +1 -0
- package/dist/domain/interfaces.d.ts +224 -0
- package/dist/domain/interfaces.js +3 -0
- package/dist/domain/interfaces.js.map +1 -0
- package/dist/domain/services/adr.service.d.ts +50 -0
- package/dist/domain/services/adr.service.js +125 -0
- package/dist/domain/services/adr.service.js.map +1 -0
- package/dist/domain/services/agent-registry.service.d.ts +26 -0
- package/dist/domain/services/agent-registry.service.js +152 -0
- package/dist/domain/services/agent-registry.service.js.map +1 -0
- package/dist/domain/services/index.d.ts +33 -0
- package/dist/domain/services/index.js +126 -0
- package/dist/domain/services/index.js.map +1 -0
- package/dist/domain/services/services.test.d.ts +1 -0
- package/dist/domain/services/services.test.js +236 -0
- package/dist/domain/services/services.test.js.map +1 -0
- package/dist/domain/services/standards.service.d.ts +47 -0
- package/dist/domain/services/standards.service.js +129 -0
- package/dist/domain/services/standards.service.js.map +1 -0
- package/dist/domain/services/tool-usage-telemetry.service.d.ts +46 -0
- package/dist/domain/services/tool-usage-telemetry.service.js +181 -0
- package/dist/domain/services/tool-usage-telemetry.service.js.map +1 -0
- package/dist/infrastructure/catalog/catalog-loader.d.ts +22 -0
- package/dist/infrastructure/catalog/catalog-loader.js +135 -0
- package/dist/infrastructure/catalog/catalog-loader.js.map +1 -0
- package/dist/infrastructure/catalog/catalog-loader.test.d.ts +1 -0
- package/dist/infrastructure/catalog/catalog-loader.test.js +184 -0
- package/dist/infrastructure/catalog/catalog-loader.test.js.map +1 -0
- package/dist/infrastructure/cli/command-executor.d.ts +20 -0
- package/dist/infrastructure/cli/command-executor.js +109 -0
- package/dist/infrastructure/cli/command-executor.js.map +1 -0
- package/dist/infrastructure/cli/command-executor.test.d.ts +1 -0
- package/dist/infrastructure/cli/command-executor.test.js +98 -0
- package/dist/infrastructure/cli/command-executor.test.js.map +1 -0
- package/dist/infrastructure/cli/providers/index.d.ts +52 -0
- package/dist/infrastructure/cli/providers/index.js +175 -0
- package/dist/infrastructure/cli/providers/index.js.map +1 -0
- package/dist/infrastructure/formatters/output-formatter.service.d.ts +28 -0
- package/dist/infrastructure/formatters/output-formatter.service.js +198 -0
- package/dist/infrastructure/formatters/output-formatter.service.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +10 -0
- package/dist/main.js.map +1 -0
- package/dist/test/mocks/index.d.ts +44 -0
- package/dist/test/mocks/index.js +135 -0
- package/dist/test/mocks/index.js.map +1 -0
- package/package.json +80 -0
- package/shell/completion.bash +85 -0
- package/shell/completion.fish +72 -0
- package/shell/completion.zsh +83 -0
- package/templates/evolith.yaml.example +45 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PhaseTransitionUseCase = exports.InitializeProjectUseCase = void 0;
|
|
13
|
+
const services_1 = require("../../domain/services");
|
|
14
|
+
const catalog_loader_1 = require("../../infrastructure/catalog/catalog-loader");
|
|
15
|
+
const providers_1 = require("../../infrastructure/cli/providers");
|
|
16
|
+
const observability_1 = require("../../core/observability");
|
|
17
|
+
class InitializeProjectUseCase {
|
|
18
|
+
constructor(fs) {
|
|
19
|
+
this.fs = fs;
|
|
20
|
+
this.phaseService = new services_1.PhaseService();
|
|
21
|
+
}
|
|
22
|
+
async execute(input, cwd) {
|
|
23
|
+
const warnings = [];
|
|
24
|
+
const errors = [];
|
|
25
|
+
const artifacts = [];
|
|
26
|
+
try {
|
|
27
|
+
const runtimes = catalog_loader_1.catalogLoader.loadRuntimeCatalog();
|
|
28
|
+
const runtime = runtimes.find(r => r.id === input.runtime);
|
|
29
|
+
if (!runtime) {
|
|
30
|
+
errors.push(`Runtime ${input.runtime} not found`);
|
|
31
|
+
return { success: false, artifacts, warnings, errors };
|
|
32
|
+
}
|
|
33
|
+
const monorepos = catalog_loader_1.catalogLoader.getMonorepoOptions();
|
|
34
|
+
const monorepo = monorepos.find(m => m.id === input.monorepo);
|
|
35
|
+
if (!monorepo) {
|
|
36
|
+
errors.push(`Monorepo ${input.monorepo} not found`);
|
|
37
|
+
return { success: false, artifacts, warnings, errors };
|
|
38
|
+
}
|
|
39
|
+
const architectures = catalog_loader_1.catalogLoader.getArchitecturePatterns();
|
|
40
|
+
const architecture = architectures.find(a => a.id === input.architecture);
|
|
41
|
+
if (!architecture) {
|
|
42
|
+
errors.push(`Architecture ${input.architecture} not found`);
|
|
43
|
+
return { success: false, artifacts, warnings, errors };
|
|
44
|
+
}
|
|
45
|
+
const projectDir = `${cwd}/${input.name}`;
|
|
46
|
+
await this.fs.ensureDir(projectDir);
|
|
47
|
+
await this.scaffoldEvolithYaml(input, projectDir);
|
|
48
|
+
artifacts.push(`${input.name}/evolith.yaml`);
|
|
49
|
+
await this.scaffoldReadme(input, projectDir);
|
|
50
|
+
artifacts.push(`${input.name}/README.md`, `${input.name}/README.es.md`);
|
|
51
|
+
await this.scaffoldByRuntime(input, projectDir);
|
|
52
|
+
artifacts.push(`${input.name}/package.json`);
|
|
53
|
+
if (input.features.includes('adr')) {
|
|
54
|
+
await this.fs.ensureDir(`${projectDir}/reference/architecture/adrs`);
|
|
55
|
+
await this.fs.writeJson(`${projectDir}/reference/architecture/adrs/adr-matrix.json`, { adrs: [] });
|
|
56
|
+
artifacts.push(`${input.name}/reference/architecture/adrs/adr-matrix.json`);
|
|
57
|
+
}
|
|
58
|
+
if (input.features.includes('hooks')) {
|
|
59
|
+
await this.fs.ensureDir(`${projectDir}/.husky`);
|
|
60
|
+
await this.fs.writeFile(`${projectDir}/.husky/pre-commit`, '#!/bin/sh\nevolution validate --pre-commit\n');
|
|
61
|
+
artifacts.push(`${input.name}/.husky/pre-commit`);
|
|
62
|
+
}
|
|
63
|
+
if (input.features.includes('acl')) {
|
|
64
|
+
await this.fs.ensureDir(`${projectDir}/rulesets/acl`);
|
|
65
|
+
await this.fs.writeJson(`${projectDir}/rulesets/acl/anti-corruption-layer.rules.json`, { version: '1.0.0', principles: [] });
|
|
66
|
+
artifacts.push(`${input.name}/rulesets/acl/anti-corruption-layer.rules.json`);
|
|
67
|
+
}
|
|
68
|
+
const platformCheck = await this.checkRuntimePlatform(input.runtime);
|
|
69
|
+
if (!platformCheck.available) {
|
|
70
|
+
warnings.push(`Platform ${input.runtime} not detected. ${platformCheck.installHint || ''}`);
|
|
71
|
+
}
|
|
72
|
+
return { success: true, artifacts, warnings, errors };
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
const err = error;
|
|
76
|
+
errors.push(err.message || 'Unknown error');
|
|
77
|
+
return { success: false, artifacts, warnings, errors };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async scaffoldEvolithYaml(input, projectDir) {
|
|
81
|
+
const config = {
|
|
82
|
+
coreRef: { version: '1.0.0', path: '../evolith' },
|
|
83
|
+
governance: { version: '1.0.0' },
|
|
84
|
+
product: { name: input.name, type: 'enterprise-application', phase: 'phase-0' },
|
|
85
|
+
tools: {
|
|
86
|
+
runtime: input.runtime,
|
|
87
|
+
monorepo: input.monorepo,
|
|
88
|
+
architecture: input.architecture,
|
|
89
|
+
database: input.database,
|
|
90
|
+
api: input.apiProtocol,
|
|
91
|
+
ci: input.ciCd,
|
|
92
|
+
observability: input.observability,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
await this.fs.writeJson(`${projectDir}/evolith.yaml`, config);
|
|
96
|
+
}
|
|
97
|
+
async scaffoldReadme(input, projectDir) {
|
|
98
|
+
const readmeEn = `# ${input.name}
|
|
99
|
+
|
|
100
|
+
> Bilingual navigation: [Español](./README.es.md)
|
|
101
|
+
|
|
102
|
+
## Overview
|
|
103
|
+
|
|
104
|
+
This repository follows Evolith governance standards.
|
|
105
|
+
|
|
106
|
+
## Configuration
|
|
107
|
+
|
|
108
|
+
| Component | Tool |
|
|
109
|
+
|-----------|------|
|
|
110
|
+
| Runtime | ${input.runtime} |
|
|
111
|
+
| Monorepo | ${input.monorepo} |
|
|
112
|
+
| Architecture | ${input.architecture} |
|
|
113
|
+
| Database | ${input.database} |
|
|
114
|
+
| API | ${input.apiProtocol} |
|
|
115
|
+
|
|
116
|
+
## Quick Start
|
|
117
|
+
|
|
118
|
+
\`\`\`bash
|
|
119
|
+
evolith validate
|
|
120
|
+
evolith sdlc status
|
|
121
|
+
\`\`\`
|
|
122
|
+
`;
|
|
123
|
+
const readmeEs = `# ${input.name}
|
|
124
|
+
|
|
125
|
+
> Navegación bilingüe: [English](./README.md)
|
|
126
|
+
|
|
127
|
+
## Descripción General
|
|
128
|
+
|
|
129
|
+
Este repositorio sigue los estándares de gobernanza de Evolith.
|
|
130
|
+
|
|
131
|
+
## Configuración
|
|
132
|
+
|
|
133
|
+
| Componente | Herramienta |
|
|
134
|
+
|------------|-------------|
|
|
135
|
+
| Runtime | ${input.runtime} |
|
|
136
|
+
| Monorepo | ${input.monorepo} |
|
|
137
|
+
| Arquitectura | ${input.architecture} |
|
|
138
|
+
| Base de Datos | ${input.database} |
|
|
139
|
+
| API | ${input.apiProtocol} |
|
|
140
|
+
|
|
141
|
+
## Inicio Rápido
|
|
142
|
+
|
|
143
|
+
\`\`\`bash
|
|
144
|
+
evolith validate
|
|
145
|
+
evolith sdlc status
|
|
146
|
+
\`\`\`
|
|
147
|
+
`;
|
|
148
|
+
await this.fs.writeFile(`${projectDir}/README.md`, readmeEn);
|
|
149
|
+
await this.fs.writeFile(`${projectDir}/README.es.md`, readmeEs);
|
|
150
|
+
}
|
|
151
|
+
async scaffoldByRuntime(input, projectDir) {
|
|
152
|
+
switch (input.runtime) {
|
|
153
|
+
case 'nodejs':
|
|
154
|
+
case 'typescript':
|
|
155
|
+
await this.scaffoldNodeJs(input, projectDir);
|
|
156
|
+
break;
|
|
157
|
+
case 'dotnet':
|
|
158
|
+
await this.scaffoldDotnet(input, projectDir);
|
|
159
|
+
break;
|
|
160
|
+
case 'python':
|
|
161
|
+
await this.scaffoldPython(input, projectDir);
|
|
162
|
+
break;
|
|
163
|
+
default:
|
|
164
|
+
throw new Error(`Runtime ${input.runtime} scaffolding not implemented`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async scaffoldNodeJs(input, projectDir) {
|
|
168
|
+
const isTs = input.runtime === 'typescript';
|
|
169
|
+
const packageJson = {
|
|
170
|
+
name: input.name,
|
|
171
|
+
version: '0.1.0',
|
|
172
|
+
scripts: {
|
|
173
|
+
build: isTs ? 'tsc' : 'echo "No build"',
|
|
174
|
+
start: isTs ? 'node dist/main.js' : 'node src/index.js',
|
|
175
|
+
dev: isTs ? 'ts-node src/main.ts' : 'node src/index.js',
|
|
176
|
+
test: 'jest',
|
|
177
|
+
lint: 'eslint .',
|
|
178
|
+
validate: 'evolith validate',
|
|
179
|
+
},
|
|
180
|
+
devDependencies: isTs
|
|
181
|
+
? { typescript: '^5.0.0', '@types/node': '^20.0.0', jest: '^29.0.0', eslint: '^8.0.0' }
|
|
182
|
+
: { jest: '^29.0.0', eslint: '^8.0.0' },
|
|
183
|
+
};
|
|
184
|
+
await this.fs.writeJson(`${projectDir}/package.json`, packageJson);
|
|
185
|
+
await this.fs.ensureDir(`${projectDir}/src`);
|
|
186
|
+
if (isTs) {
|
|
187
|
+
await this.fs.writeJson(`${projectDir}/tsconfig.json`, {
|
|
188
|
+
compilerOptions: {
|
|
189
|
+
target: 'ES2020',
|
|
190
|
+
module: 'commonjs',
|
|
191
|
+
outDir: './dist',
|
|
192
|
+
rootDir: './src',
|
|
193
|
+
strict: true,
|
|
194
|
+
esModuleInterop: true,
|
|
195
|
+
},
|
|
196
|
+
include: ['src/**/*'],
|
|
197
|
+
exclude: ['node_modules', 'dist'],
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async scaffoldDotnet(input, projectDir) {
|
|
202
|
+
const csproj = `<Project Sdk="Microsoft.NET.Sdk.Web">
|
|
203
|
+
<PropertyGroup>
|
|
204
|
+
<TargetFramework>net8.0</TargetFramework>
|
|
205
|
+
<OutputType>Exe</OutputType>
|
|
206
|
+
<Nullable>enable</Nullable>
|
|
207
|
+
<ImplicitUsings>enable</ImplicitUsings>
|
|
208
|
+
</PropertyGroup>
|
|
209
|
+
</Project>
|
|
210
|
+
`;
|
|
211
|
+
await this.fs.writeFile(`${projectDir}/${input.name}.csproj`, csproj);
|
|
212
|
+
await this.fs.ensureDir(`${projectDir}/src`);
|
|
213
|
+
}
|
|
214
|
+
async scaffoldPython(input, projectDir) {
|
|
215
|
+
await this.fs.writeFile(`${projectDir}/requirements.txt`, `# ${input.name}\npytest>=8.0.0\nblack>=24.0.0\nruff>=0.2.0\n`);
|
|
216
|
+
await this.fs.writeJson(`${projectDir}/pyproject.toml`, {
|
|
217
|
+
project: { name: input.name, version: '0.1.0', requiresPython: '>=3.11' },
|
|
218
|
+
tool: { black: { lineLength: 100 }, ruff: { lineLength: 100 } },
|
|
219
|
+
});
|
|
220
|
+
await this.fs.ensureDir(`${projectDir}/src`);
|
|
221
|
+
await this.fs.writeFile(`${projectDir}/src/__init__.py`, '');
|
|
222
|
+
await this.fs.writeFile(`${projectDir}/src/main.py`, `def main():\n print("${input.name} initialized")\n\nif __name__ == "__main__":\n main()\n`);
|
|
223
|
+
}
|
|
224
|
+
async checkRuntimePlatform(runtime) {
|
|
225
|
+
switch (runtime) {
|
|
226
|
+
case 'nodejs':
|
|
227
|
+
case 'typescript':
|
|
228
|
+
return { available: await providers_1.npmProvider.isAvailable() };
|
|
229
|
+
case 'dotnet':
|
|
230
|
+
return { available: await providers_1.dotnetProvider.isAvailable() };
|
|
231
|
+
case 'python':
|
|
232
|
+
return { available: await providers_1.pythonProvider.isAvailable() };
|
|
233
|
+
default:
|
|
234
|
+
return { available: false };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.InitializeProjectUseCase = InitializeProjectUseCase;
|
|
239
|
+
__decorate([
|
|
240
|
+
(0, observability_1.Timed)('InitializeProjectUseCase.execute'),
|
|
241
|
+
__metadata("design:type", Function),
|
|
242
|
+
__metadata("design:paramtypes", [Object, String]),
|
|
243
|
+
__metadata("design:returntype", Promise)
|
|
244
|
+
], InitializeProjectUseCase.prototype, "execute", null);
|
|
245
|
+
class PhaseTransitionUseCase {
|
|
246
|
+
constructor(fs) {
|
|
247
|
+
this.fs = fs;
|
|
248
|
+
this.phaseService = new services_1.PhaseService();
|
|
249
|
+
}
|
|
250
|
+
async execute(from, to, tools, cwd) {
|
|
251
|
+
observability_1.logger.info('Phase transition initiated', { from, to, toolCount: tools.length });
|
|
252
|
+
const warnings = [];
|
|
253
|
+
const errors = [];
|
|
254
|
+
if (!this.phaseService.canTransition(from, to)) {
|
|
255
|
+
errors.push(`Invalid phase transition: ${from} → ${to}. Must be consecutive phases.`);
|
|
256
|
+
return { success: false, from, to, gateResults: [], executedTools: [], warnings, errors };
|
|
257
|
+
}
|
|
258
|
+
const gateResults = await this.validateGates(from, cwd);
|
|
259
|
+
const failedRequiredGates = gateResults.filter(g => !g.passed && g.required);
|
|
260
|
+
if (failedRequiredGates.length > 0) {
|
|
261
|
+
errors.push(...failedRequiredGates.map(g => `Gate ${g.id} failed: ${g.description}`));
|
|
262
|
+
}
|
|
263
|
+
const executedTools = [];
|
|
264
|
+
for (const tool of tools) {
|
|
265
|
+
executedTools.push(tool);
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
success: errors.length === 0,
|
|
269
|
+
from,
|
|
270
|
+
to,
|
|
271
|
+
gateResults,
|
|
272
|
+
executedTools,
|
|
273
|
+
warnings,
|
|
274
|
+
errors,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
async validateGates(phase, cwd) {
|
|
278
|
+
const gates = [];
|
|
279
|
+
const evolithYamlPath = `${cwd}/evolith.yaml`;
|
|
280
|
+
switch (phase) {
|
|
281
|
+
case 'phase-0':
|
|
282
|
+
gates.push({ id: 'PG0-01', passed: await this.fs.exists(evolithYamlPath), description: 'evolith.yaml exists', required: true });
|
|
283
|
+
if (await this.fs.exists(evolithYamlPath)) {
|
|
284
|
+
const config = await this.fs.readJson(evolithYamlPath);
|
|
285
|
+
gates.push({ id: 'PG0-02', passed: !!config.coreRef?.version, description: 'coreRef.version pinned', required: true });
|
|
286
|
+
}
|
|
287
|
+
break;
|
|
288
|
+
case 'phase-1':
|
|
289
|
+
gates.push({ id: 'PG1-01', passed: await this.fs.exists(`${cwd}/package.json`), description: 'package.json exists', required: true });
|
|
290
|
+
gates.push({ id: 'PG1-02', passed: await this.fs.exists(`${cwd}/src`), description: 'src/ directory exists', required: true });
|
|
291
|
+
break;
|
|
292
|
+
case 'phase-2':
|
|
293
|
+
gates.push({ id: 'PG2-01', passed: await this.fs.exists(`${cwd}/rulesets`), description: 'rulesets/ exists', required: true });
|
|
294
|
+
gates.push({ id: 'PG2-02', passed: await this.fs.exists(`${cwd}/.harness`), description: '.harness/ exists', required: true });
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
return gates;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
exports.PhaseTransitionUseCase = PhaseTransitionUseCase;
|
|
301
|
+
__decorate([
|
|
302
|
+
(0, observability_1.Timed)('PhaseTransitionUseCase.execute'),
|
|
303
|
+
__metadata("design:type", Function),
|
|
304
|
+
__metadata("design:paramtypes", [String, String, Array, String]),
|
|
305
|
+
__metadata("design:returntype", Promise)
|
|
306
|
+
], PhaseTransitionUseCase.prototype, "execute", null);
|
|
307
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/application/services/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("./index");
|
|
4
|
+
const mocks_1 = require("../../../test/mocks");
|
|
5
|
+
describe('InitializeProjectUseCase', () => {
|
|
6
|
+
let useCase;
|
|
7
|
+
let mockFs;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
mockFs = new mocks_1.MockFileSystem();
|
|
10
|
+
useCase = new index_1.InitializeProjectUseCase(mockFs);
|
|
11
|
+
});
|
|
12
|
+
describe('execute', () => {
|
|
13
|
+
const validInput = {
|
|
14
|
+
name: 'test-project',
|
|
15
|
+
runtime: 'nodejs',
|
|
16
|
+
monorepo: 'none',
|
|
17
|
+
architecture: 'clean',
|
|
18
|
+
database: 'postgresql',
|
|
19
|
+
apiProtocol: 'rest',
|
|
20
|
+
ciCd: 'github',
|
|
21
|
+
observability: 'otel',
|
|
22
|
+
features: [],
|
|
23
|
+
agents: [],
|
|
24
|
+
};
|
|
25
|
+
it('should return success for valid input', async () => {
|
|
26
|
+
const result = await useCase.execute(validInput, '/test/cwd');
|
|
27
|
+
expect(result.success).toBe(true);
|
|
28
|
+
expect(result.artifacts.length).toBeGreaterThan(0);
|
|
29
|
+
expect(result.errors).toHaveLength(0);
|
|
30
|
+
});
|
|
31
|
+
it('should return error for invalid runtime', async () => {
|
|
32
|
+
const invalidInput = { ...validInput, runtime: 'invalid-runtime' };
|
|
33
|
+
const result = await useCase.execute(invalidInput, '/test/cwd');
|
|
34
|
+
expect(result.success).toBe(false);
|
|
35
|
+
expect(result.errors).toContain('Runtime invalid-runtime not found');
|
|
36
|
+
});
|
|
37
|
+
it('should return error for invalid monorepo', async () => {
|
|
38
|
+
const invalidInput = { ...validInput, monorepo: 'invalid-monorepo' };
|
|
39
|
+
const result = await useCase.execute(invalidInput, '/test/cwd');
|
|
40
|
+
expect(result.success).toBe(false);
|
|
41
|
+
expect(result.errors).toContain('Monorepo invalid-monorepo not found');
|
|
42
|
+
});
|
|
43
|
+
it('should return error for invalid architecture', async () => {
|
|
44
|
+
const invalidInput = { ...validInput, architecture: 'invalid-arch' };
|
|
45
|
+
const result = await useCase.execute(invalidInput, '/test/cwd');
|
|
46
|
+
expect(result.success).toBe(false);
|
|
47
|
+
expect(result.errors).toContain('Architecture invalid-arch not found');
|
|
48
|
+
});
|
|
49
|
+
it('should create evolith.yaml artifact', async () => {
|
|
50
|
+
await useCase.execute(validInput, '/test/cwd');
|
|
51
|
+
const exists = await mockFs.exists('/test/cwd/test-project/evolith.yaml');
|
|
52
|
+
expect(exists).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
it('should create README files (bilingual)', async () => {
|
|
55
|
+
await useCase.execute(validInput, '/test/cwd');
|
|
56
|
+
const readmeEn = await mockFs.exists('/test/cwd/test-project/README.md');
|
|
57
|
+
const readmeEs = await mockFs.exists('/test/cwd/test-project/README.es.md');
|
|
58
|
+
expect(readmeEn).toBe(true);
|
|
59
|
+
expect(readmeEs).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
it('should create package.json for nodejs runtime', async () => {
|
|
62
|
+
await useCase.execute(validInput, '/test/cwd');
|
|
63
|
+
const pkgJson = await mockFs.exists('/test/cwd/test-project/package.json');
|
|
64
|
+
expect(pkgJson).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it('should create tsconfig.json for typescript runtime', async () => {
|
|
67
|
+
const typescriptInput = { ...validInput, runtime: 'typescript' };
|
|
68
|
+
await useCase.execute(typescriptInput, '/test/cwd');
|
|
69
|
+
const tsconfig = await mockFs.exists('/test/cwd/test-project/tsconfig.json');
|
|
70
|
+
expect(tsconfig).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
it('should create .csproj for dotnet runtime', async () => {
|
|
73
|
+
const dotnetInput = { ...validInput, runtime: 'dotnet' };
|
|
74
|
+
await useCase.execute(dotnetInput, '/test/cwd');
|
|
75
|
+
const csproj = await mockFs.exists('/test/cwd/test-project/test-project.csproj');
|
|
76
|
+
expect(csproj).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
it('should create requirements.txt for python runtime', async () => {
|
|
79
|
+
const pythonInput = { ...validInput, runtime: 'python' };
|
|
80
|
+
await useCase.execute(pythonInput, '/test/cwd');
|
|
81
|
+
const requirements = await mockFs.exists('/test/cwd/test-project/requirements.txt');
|
|
82
|
+
expect(requirements).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
it('should create ADR directory if adr feature enabled', async () => {
|
|
85
|
+
const adrInput = { ...validInput, features: ['adr'] };
|
|
86
|
+
await useCase.execute(adrInput, '/test/cwd');
|
|
87
|
+
const adrDir = await mockFs.exists('/test/cwd/test-project/reference/architecture/adrs');
|
|
88
|
+
expect(adrDir).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
it('should create hooks directory if hooks feature enabled', async () => {
|
|
91
|
+
const hooksInput = { ...validInput, features: ['hooks'] };
|
|
92
|
+
await useCase.execute(hooksInput, '/test/cwd');
|
|
93
|
+
const hooksDir = await mockFs.exists('/test/cwd/test-project/.husky');
|
|
94
|
+
expect(hooksDir).toBe(true);
|
|
95
|
+
});
|
|
96
|
+
it('should create ACL directory if acl feature enabled', async () => {
|
|
97
|
+
const aclInput = { ...validInput, features: ['acl'] };
|
|
98
|
+
await useCase.execute(aclInput, '/test/cwd');
|
|
99
|
+
const aclDir = await mockFs.exists('/test/cwd/test-project/rulesets/acl');
|
|
100
|
+
expect(aclDir).toBe(true);
|
|
101
|
+
});
|
|
102
|
+
it('should track all created artifacts', async () => {
|
|
103
|
+
const result = await useCase.execute(validInput, '/test/cwd');
|
|
104
|
+
expect(result.artifacts).toContain('test-project/evolith.yaml');
|
|
105
|
+
expect(result.artifacts).toContain('test-project/README.md');
|
|
106
|
+
expect(result.artifacts).toContain('test-project/README.es.md');
|
|
107
|
+
expect(result.artifacts).toContain('test-project/package.json');
|
|
108
|
+
});
|
|
109
|
+
it('should warn if runtime platform not detected', async () => {
|
|
110
|
+
const result = await useCase.execute(validInput, '/test/cwd');
|
|
111
|
+
expect(Array.isArray(result.warnings)).toBe(true);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('PhaseTransitionUseCase', () => {
|
|
116
|
+
let useCase;
|
|
117
|
+
let mockFs;
|
|
118
|
+
beforeEach(() => {
|
|
119
|
+
mockFs = new mocks_1.MockFileSystem();
|
|
120
|
+
mockFs.setJsonFile('/test/cwd/evolith.yaml', {
|
|
121
|
+
coreRef: { version: '1.0.0' },
|
|
122
|
+
governance: { version: '1.0.0' },
|
|
123
|
+
product: { name: 'test', phase: 'phase-0' },
|
|
124
|
+
});
|
|
125
|
+
useCase = new index_1.PhaseTransitionUseCase(mockFs);
|
|
126
|
+
});
|
|
127
|
+
describe('execute', () => {
|
|
128
|
+
it('should successfully transition from phase-0 to phase-1', async () => {
|
|
129
|
+
const result = await useCase.execute('phase-0', 'phase-1', [], '/test/cwd');
|
|
130
|
+
expect(result.success).toBe(true);
|
|
131
|
+
expect(result.from).toBe('phase-0');
|
|
132
|
+
expect(result.to).toBe('phase-1');
|
|
133
|
+
});
|
|
134
|
+
it('should fail for non-consecutive phases', async () => {
|
|
135
|
+
const result = await useCase.execute('phase-0', 'phase-2', [], '/test/cwd');
|
|
136
|
+
expect(result.success).toBe(false);
|
|
137
|
+
expect(result.errors).toContain('Invalid phase transition: phase-0 → phase-2. Must be consecutive phases.');
|
|
138
|
+
});
|
|
139
|
+
it('should fail for backwards transition', async () => {
|
|
140
|
+
const result = await useCase.execute('phase-2', 'phase-1', [], '/test/cwd');
|
|
141
|
+
expect(result.success).toBe(false);
|
|
142
|
+
expect(result.errors.some(e => e.includes('Invalid phase transition'))).toBe(true);
|
|
143
|
+
});
|
|
144
|
+
it('should track executed tools', async () => {
|
|
145
|
+
const tools = ['acl', 'adr', 'hooks'];
|
|
146
|
+
const result = await useCase.execute('phase-1', 'phase-2', tools, '/test/cwd');
|
|
147
|
+
expect(result.executedTools).toEqual(tools);
|
|
148
|
+
});
|
|
149
|
+
it('should return gate results', async () => {
|
|
150
|
+
const result = await useCase.execute('phase-0', 'phase-1', [], '/test/cwd');
|
|
151
|
+
expect(Array.isArray(result.gateResults)).toBe(true);
|
|
152
|
+
});
|
|
153
|
+
it('should validate gates when defined', async () => {
|
|
154
|
+
mockFs.setJsonFile('/test/cwd/package.json', { name: 'test', version: '1.0.0' });
|
|
155
|
+
mockFs.setDirectory('/test/cwd/src');
|
|
156
|
+
const result = await useCase.execute('phase-1', 'phase-2', [], '/test/cwd');
|
|
157
|
+
expect(Array.isArray(result.gateResults)).toBe(true);
|
|
158
|
+
});
|
|
159
|
+
it('should allow transition when all required gates pass', async () => {
|
|
160
|
+
mockFs.setJsonFile('/test/cwd/rulesets/acl/anti-corruption-layer.rules.json', { version: '1.0.0' });
|
|
161
|
+
mockFs.setDirectory('/test/cwd/rulesets');
|
|
162
|
+
mockFs.setDirectory('/test/cwd/.harness');
|
|
163
|
+
const result = await useCase.execute('phase-2', 'phase-3', [], '/test/cwd');
|
|
164
|
+
expect(result.success).toBe(true);
|
|
165
|
+
});
|
|
166
|
+
it('should return errors array even on success', async () => {
|
|
167
|
+
const result = await useCase.execute('phase-0', 'phase-1', [], '/test/cwd');
|
|
168
|
+
expect(Array.isArray(result.errors)).toBe(true);
|
|
169
|
+
});
|
|
170
|
+
it('should return warnings array even on success', async () => {
|
|
171
|
+
const result = await useCase.execute('phase-0', 'phase-1', [], '/test/cwd');
|
|
172
|
+
expect(Array.isArray(result.warnings)).toBe(true);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=services.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.test.js","sourceRoot":"","sources":["../../../src/application/services/services.test.ts"],"names":[],"mappings":";;AACA,mCAA6F;AAC7F,+CAAqD;AAErD,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,OAAiC,CAAC;IACtC,IAAI,MAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,sBAAc,EAAE,CAAC;QAC9B,OAAO,GAAG,IAAI,gCAAwB,CAAC,MAAa,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,MAAM,UAAU,GAAqB;YACnC,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,MAAM;YAChB,YAAY,EAAE,OAAO;YACrB,QAAQ,EAAE,YAAY;YACtB,WAAW,EAAE,MAAM;YACnB,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,MAAM;YACrB,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAE9D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,YAAY,GAAG,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;YACnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,YAAY,GAAG,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,YAAY,GAAG,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;YAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YACzE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;YAE5E,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,eAAe,GAAG,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,YAAmB,EAAE,CAAC;YACxE,MAAM,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;YAEpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;YAC7E,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,WAAW,GAAG,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YACzD,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAEhD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACjF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,WAAW,GAAG,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YACzD,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAEhD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC;YACpF,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAE7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC;YACzF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,UAAU,GAAG,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;YACtE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAE7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;YAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAE9D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAK9D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,OAA+B,CAAC;IACpC,IAAI,MAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,sBAAc,EAAE,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,wBAAwB,EAAE;YAC3C,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7B,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;YAChC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;SAC5C,CAAC,CAAC;QACH,OAAO,GAAG,IAAI,8BAAsB,CAAC,MAAa,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0EAA0E,CAAC,CAAC;QAC9G,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YAE/E,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,CAAC,WAAW,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;YAErC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,CAAC,WAAW,CAAC,yDAAyD,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACpG,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RulesetValidatorService, ValidationResult } from '../../core/validators/ruleset-validator.service';
|
|
2
|
+
export interface ValidateSatelliteInput {
|
|
3
|
+
satellitePath: string;
|
|
4
|
+
corePath?: string;
|
|
5
|
+
rulesetId?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ValidateSatelliteOutput {
|
|
8
|
+
result: ValidationResult;
|
|
9
|
+
formattedOutput?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class ValidateSatelliteUseCase {
|
|
12
|
+
private readonly validator;
|
|
13
|
+
constructor(validator?: RulesetValidatorService);
|
|
14
|
+
execute(input: ValidateSatelliteInput): Promise<ValidateSatelliteOutput>;
|
|
15
|
+
executeWithFormat(input: ValidateSatelliteInput, format: 'json' | 'markdown'): Promise<ValidateSatelliteOutput>;
|
|
16
|
+
private formatMarkdown;
|
|
17
|
+
private findCoreFromSatellite;
|
|
18
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidateSatelliteUseCase = void 0;
|
|
4
|
+
const ruleset_validator_service_1 = require("../../core/validators/ruleset-validator.service");
|
|
5
|
+
class ValidateSatelliteUseCase {
|
|
6
|
+
constructor(validator) {
|
|
7
|
+
this.validator = validator || new ruleset_validator_service_1.RulesetValidatorService();
|
|
8
|
+
}
|
|
9
|
+
async execute(input) {
|
|
10
|
+
const { satellitePath, corePath, rulesetId } = input;
|
|
11
|
+
let result;
|
|
12
|
+
if (rulesetId) {
|
|
13
|
+
const coreResolved = corePath || this.findCoreFromSatellite(satellitePath);
|
|
14
|
+
const issues = await this.validator.loadRulesetById(coreResolved, rulesetId);
|
|
15
|
+
result = {
|
|
16
|
+
status: issues.some(i => i.blocking) ? 'failed' : issues.length > 0 ? 'warning' : 'passed',
|
|
17
|
+
rulesChecked: issues.length,
|
|
18
|
+
issues,
|
|
19
|
+
coreRef: { version: null, path: coreResolved },
|
|
20
|
+
timestamp: new Date().toISOString(),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
result = await this.validator.validate(satellitePath, corePath);
|
|
25
|
+
}
|
|
26
|
+
return { result };
|
|
27
|
+
}
|
|
28
|
+
async executeWithFormat(input, format) {
|
|
29
|
+
const { result } = await this.execute(input);
|
|
30
|
+
let formattedOutput;
|
|
31
|
+
if (format === 'markdown') {
|
|
32
|
+
formattedOutput = this.formatMarkdown(result);
|
|
33
|
+
}
|
|
34
|
+
return { result, formattedOutput };
|
|
35
|
+
}
|
|
36
|
+
formatMarkdown(result) {
|
|
37
|
+
const lines = [
|
|
38
|
+
'# Validation Report',
|
|
39
|
+
'',
|
|
40
|
+
`**Status:** ${result.status.toUpperCase()}`,
|
|
41
|
+
`**Rules Checked:** ${result.rulesChecked}`,
|
|
42
|
+
`**Timestamp:** ${result.timestamp}`,
|
|
43
|
+
'',
|
|
44
|
+
];
|
|
45
|
+
if (result.coreRef.version) {
|
|
46
|
+
lines.push(`**Core Version:** ${result.coreRef.version}`);
|
|
47
|
+
}
|
|
48
|
+
lines.push('');
|
|
49
|
+
const blocking = result.issues.filter(i => i.blocking);
|
|
50
|
+
const warnings = result.issues.filter(i => !i.blocking);
|
|
51
|
+
if (blocking.length > 0) {
|
|
52
|
+
lines.push('## Blocking Issues');
|
|
53
|
+
for (const issue of blocking) {
|
|
54
|
+
lines.push(`- **${issue.ruleId}** [${issue.severity}] ${issue.title}`);
|
|
55
|
+
lines.push(` - ${issue.description}`);
|
|
56
|
+
if (issue.file) {
|
|
57
|
+
lines.push(` - File: \`${issue.file}\``);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
lines.push('');
|
|
61
|
+
}
|
|
62
|
+
if (warnings.length > 0) {
|
|
63
|
+
lines.push('## Warnings');
|
|
64
|
+
for (const issue of warnings) {
|
|
65
|
+
lines.push(`- **${issue.ruleId}** [${issue.severity}] ${issue.title}`);
|
|
66
|
+
lines.push(` - ${issue.description}`);
|
|
67
|
+
}
|
|
68
|
+
lines.push('');
|
|
69
|
+
}
|
|
70
|
+
return lines.join('\n');
|
|
71
|
+
}
|
|
72
|
+
findCoreFromSatellite(satellitePath) {
|
|
73
|
+
const path = require('path');
|
|
74
|
+
const parts = satellitePath.split(path.sep);
|
|
75
|
+
while (parts.length > 0) {
|
|
76
|
+
parts.pop();
|
|
77
|
+
const candidate = path.join(parts.join(path.sep), 'rulesets');
|
|
78
|
+
try {
|
|
79
|
+
const fs = require('fs-extra');
|
|
80
|
+
if (fs.pathExistsSync(candidate)) {
|
|
81
|
+
return parts.join(path.sep);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return satellitePath;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.ValidateSatelliteUseCase = ValidateSatelliteUseCase;
|
|
92
|
+
//# sourceMappingURL=validate-satellite.use-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-satellite.use-case.js","sourceRoot":"","sources":["../../../src/application/use-cases/validate-satellite.use-case.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|