@domainlang/cli 0.1.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,103 @@
1
+ # @domainlang/cli
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@domainlang/cli.svg)](https://www.npmjs.com/package/@domainlang/cli)
4
+ [![License](https://img.shields.io/npm/l/@domainlang/cli.svg)](https://github.com/larsbaunwall/DomainLang/blob/main/LICENSE)
5
+
6
+ Command-line interface for [DomainLang](https://github.com/larsbaunwall/DomainLang) - a Domain-Driven Design modeling language.
7
+
8
+ ## Features
9
+
10
+ - 📦 **Dependency Management** - Git-native model dependencies with version locking
11
+ - 🔍 **Validation** - Validate your DomainLang models for correctness
12
+ - 🌳 **Impact Analysis** - Visualize dependency trees and analyze changes
13
+ - 🔒 **Compliance** - Audit and check model compliance
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npm install -g @domainlang/cli
19
+ ```
20
+
21
+ Or use with npx:
22
+
23
+ ```bash
24
+ npx @domainlang/cli --help
25
+ ```
26
+
27
+ ## Quick Start
28
+
29
+ ```bash
30
+ # Validate a DomainLang model
31
+ domain-lang-cli model validate
32
+
33
+ # Install model dependencies
34
+ domain-lang-cli install
35
+
36
+ # View dependency tree
37
+ domain-lang-cli model tree
38
+ ```
39
+
40
+ ## Commands
41
+
42
+ ### Dependency Management
43
+
44
+ DomainLang supports a git-native model dependency workflow via `model.yaml` and a lock file.
45
+
46
+ ```bash
47
+ # List dependencies (from lock file)
48
+ domain-lang-cli model list
49
+
50
+ # Add/remove dependencies in model.yaml
51
+ domain-lang-cli model add <name> <owner/repo> [version]
52
+ domain-lang-cli model remove <name>
53
+
54
+ # Install and lock dependencies
55
+ domain-lang-cli install
56
+ ```
57
+
58
+ ### Analysis & Validation
59
+
60
+ ```bash
61
+ # Validate model structure and references
62
+ domain-lang-cli model validate
63
+
64
+ # See dependency tree and impact analysis
65
+ domain-lang-cli model tree [--commits]
66
+ domain-lang-cli model deps <owner/repo>
67
+
68
+ # Audit and compliance checks
69
+ domain-lang-cli model audit
70
+ domain-lang-cli model compliance
71
+ ```
72
+
73
+ ### Utilities
74
+
75
+ ```bash
76
+ # Clear dependency cache
77
+ domain-lang-cli cache-clear
78
+
79
+ # Get help
80
+ domain-lang-cli --help
81
+ ```
82
+
83
+ ### Code Generation (Experimental)
84
+
85
+ ```bash
86
+ # Generate code from a model (currently produces stub output)
87
+ domain-lang-cli generate <file>
88
+ ```
89
+
90
+ ## Related Packages
91
+
92
+ - [@domainlang/language](https://www.npmjs.com/package/@domainlang/language) - Core language library and SDK
93
+ - [DomainLang VS Code Extension](https://marketplace.visualstudio.com/items?itemName=thinkability.domain-lang) - IDE support with syntax highlighting and validation
94
+
95
+ ## Documentation
96
+
97
+ - [Getting Started](https://github.com/larsbaunwall/DomainLang/blob/main/dsl/domain-lang/docs/getting-started.md)
98
+ - [Language Reference](https://github.com/larsbaunwall/DomainLang/blob/main/dsl/domain-lang/docs/language.md)
99
+ - [Quick Reference](https://github.com/larsbaunwall/DomainLang/blob/main/dsl/domain-lang/docs/quick-reference.md)
100
+
101
+ ## License
102
+
103
+ Apache-2.0
@@ -0,0 +1,9 @@
1
+ import type { AstNode, LangiumCoreServices, LangiumDocument } from 'langium';
2
+ export declare function extractDocument(fileName: string, services: LangiumCoreServices): Promise<LangiumDocument>;
3
+ export declare function extractAstNode<T extends AstNode>(fileName: string, services: LangiumCoreServices): Promise<T>;
4
+ interface FilePathData {
5
+ destination: string;
6
+ name: string;
7
+ }
8
+ export declare function extractDestinationAndName(filePath: string, destination: string | undefined): FilePathData;
9
+ export {};
@@ -0,0 +1,39 @@
1
+ import chalk from 'chalk';
2
+ import * as path from 'node:path';
3
+ import * as fs from 'node:fs';
4
+ import { URI } from 'langium';
5
+ export async function extractDocument(fileName, services) {
6
+ const extensions = services.LanguageMetaData.fileExtensions;
7
+ if (!extensions.includes(path.extname(fileName))) {
8
+ console.error(chalk.yellow(`Please choose a file with one of these extensions: ${extensions}.`));
9
+ process.exit(1);
10
+ }
11
+ if (!fs.existsSync(fileName)) {
12
+ console.error(chalk.red(`File ${fileName} does not exist.`));
13
+ process.exit(1);
14
+ }
15
+ const document = await services.shared.workspace.LangiumDocuments.getOrCreateDocument(URI.file(path.resolve(fileName)));
16
+ await services.shared.workspace.DocumentBuilder.build([document], { validation: true });
17
+ const validationErrors = (document.diagnostics ?? []).filter(e => e.severity === 1);
18
+ if (validationErrors.length > 0) {
19
+ console.error(chalk.red('There are validation errors:'));
20
+ for (const validationError of validationErrors) {
21
+ console.error(chalk.red(`line ${validationError.range.start.line + 1}: ${validationError.message} [${document.textDocument.getText(validationError.range)}]`));
22
+ }
23
+ process.exit(1);
24
+ }
25
+ return document;
26
+ }
27
+ export async function extractAstNode(fileName, services) {
28
+ return (await extractDocument(fileName, services)).parseResult?.value;
29
+ }
30
+ export function extractDestinationAndName(filePath, destination) {
31
+ const parsed = path.parse(filePath);
32
+ const sanitizedName = parsed.name.replace(/[.-]/g, '');
33
+ const targetDirectory = destination ?? path.join(parsed.dir || '.', 'generated');
34
+ return {
35
+ destination: targetDirectory,
36
+ name: sanitizedName
37
+ };
38
+ }
39
+ //# sourceMappingURL=cli-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-util.js","sourceRoot":"","sources":["../src/cli-util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,QAA6B;IACjF,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,UAAU,GAAG,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,QAAQ,kBAAkB,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAExF,MAAM,gBAAgB,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;IACpF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CACnB,QAAQ,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,eAAe,CAAC,OAAO,KAAK,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CACvI,CAAC,CAAC;QACP,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAoB,QAAgB,EAAE,QAA6B;IACnG,OAAO,CAAC,MAAM,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,KAAU,CAAC;AAC/E,CAAC;AAOD,MAAM,UAAU,yBAAyB,CAAC,QAAgB,EAAE,WAA+B;IACvF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,WAAW,CAAC,CAAC;IAEjF,OAAO;QACH,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,aAAa;KACtB,CAAC;AACN,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * CLI commands for DomainLang dependency management.
3
+ */
4
+ export declare function listModels(workspaceRoot: string): Promise<void>;
5
+ export declare function addModel(workspaceRoot: string, name: string, source: string, version?: string): Promise<void>;
6
+ export declare function removeModel(workspaceRoot: string, name: string): Promise<void>;
7
+ export declare function statusModels(workspaceRoot: string): Promise<void>;
8
+ export declare function updateModel(workspaceRoot: string, name?: string): Promise<void>;
9
+ export declare function installModels(workspaceRoot: string): Promise<void>;
10
+ export declare function cacheClear(): Promise<void>;
11
+ export declare function showDependencyTree(workspaceRoot: string, options?: {
12
+ commits?: boolean;
13
+ }): Promise<void>;
14
+ export declare function showImpactAnalysis(workspaceRoot: string, packageName: string): Promise<void>;
15
+ export declare function validateModel(workspaceRoot: string): Promise<void>;
16
+ export declare function auditDependencies(workspaceRoot: string): Promise<void>;
17
+ export declare function checkCompliance(workspaceRoot: string): Promise<void>;
@@ -0,0 +1,218 @@
1
+ import { WorkspaceManager, DependencyAnalyzer, GovernanceValidator, loadGovernancePolicy } from '@domainlang/language';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import YAML from 'yaml';
6
+ /**
7
+ * CLI commands for DomainLang dependency management.
8
+ */
9
+ export async function listModels(workspaceRoot) {
10
+ const manager = new WorkspaceManager();
11
+ await manager.initialize(workspaceRoot);
12
+ const lock = await manager.getLockFile();
13
+ if (!lock) {
14
+ console.log('No lock file found. Run `domain-lang-cli install` to generate dependencies.');
15
+ return;
16
+ }
17
+ console.log('Model dependencies:');
18
+ for (const [name, dep] of Object.entries(lock.dependencies)) {
19
+ console.log(` ${name}@${dep.version} (${dep.commit.substring(0, 7)})`);
20
+ }
21
+ }
22
+ export async function addModel(workspaceRoot, name, source, version = 'main') {
23
+ const manifestPath = path.join(workspaceRoot, 'model.yaml');
24
+ // Read existing manifest
25
+ let manifest = {};
26
+ try {
27
+ const content = await fs.readFile(manifestPath, 'utf-8');
28
+ manifest = YAML.parse(content);
29
+ }
30
+ catch {
31
+ // Create new manifest
32
+ manifest = {
33
+ model: {
34
+ name: path.basename(workspaceRoot),
35
+ version: '1.0.0',
36
+ },
37
+ };
38
+ }
39
+ // Add dependency
40
+ if (!manifest.dependencies) {
41
+ manifest.dependencies = {};
42
+ }
43
+ manifest.dependencies[name] = {
44
+ source,
45
+ version,
46
+ };
47
+ // Write updated manifest
48
+ const yamlContent = YAML.stringify(manifest);
49
+ await fs.writeFile(manifestPath, yamlContent, 'utf-8');
50
+ console.log(`Added ${name}: ${source}@${version}`);
51
+ console.log('Run `domain-lang-cli install` to download dependencies.');
52
+ }
53
+ export async function removeModel(workspaceRoot, name) {
54
+ const manifestPath = path.join(workspaceRoot, 'model.yaml');
55
+ try {
56
+ const content = await fs.readFile(manifestPath, 'utf-8');
57
+ const manifest = YAML.parse(content);
58
+ if (!manifest.dependencies?.[name]) {
59
+ console.error(`Dependency "${name}" not found in model.yaml`);
60
+ return;
61
+ }
62
+ delete manifest.dependencies[name];
63
+ const yamlContent = YAML.stringify(manifest);
64
+ await fs.writeFile(manifestPath, yamlContent, 'utf-8');
65
+ console.log(`Removed ${name}`);
66
+ console.log('Run `domain-lang-cli install` to update lock file.');
67
+ }
68
+ catch (error) {
69
+ console.error('Failed to remove dependency:', error);
70
+ }
71
+ }
72
+ export async function statusModels(workspaceRoot) {
73
+ const manager = new WorkspaceManager({ autoResolve: false });
74
+ await manager.initialize(workspaceRoot);
75
+ const manifestPath = await manager.getManifestPath();
76
+ if (!manifestPath) {
77
+ console.log('No model.yaml found in workspace.');
78
+ return;
79
+ }
80
+ const lock = await manager.getLockFile();
81
+ const content = await fs.readFile(manifestPath, 'utf-8');
82
+ const manifest = YAML.parse(content);
83
+ if (!manifest.dependencies || Object.keys(manifest.dependencies).length === 0) {
84
+ console.log('No dependencies declared in model.yaml');
85
+ return;
86
+ }
87
+ console.log('Dependency status:');
88
+ for (const [name, dep] of Object.entries(manifest.dependencies)) {
89
+ const locked = lock?.dependencies[dep.source];
90
+ if (locked) {
91
+ console.log(` ✓ ${name} (${dep.source}@${dep.version}) → locked to ${locked.commit.substring(0, 7)}`);
92
+ }
93
+ else {
94
+ console.log(` ✗ ${name} (${dep.source}@${dep.version}) → not locked`);
95
+ }
96
+ }
97
+ if (!lock || Object.keys(lock.dependencies).length === 0) {
98
+ console.log('\nRun `domain-lang-cli install` to lock dependencies.');
99
+ }
100
+ }
101
+ export async function updateModel(workspaceRoot, name) {
102
+ console.log(name ? `Updating ${name}...` : 'Updating all dependencies...');
103
+ // For now, just regenerate the lock file
104
+ const manager = new WorkspaceManager();
105
+ await manager.initialize(workspaceRoot);
106
+ await manager.regenerateLockFile();
107
+ console.log('Dependencies updated and lock file regenerated.');
108
+ }
109
+ export async function installModels(workspaceRoot) {
110
+ const manager = new WorkspaceManager();
111
+ await manager.initialize(workspaceRoot);
112
+ const lock = await manager.ensureLockFile();
113
+ const count = Object.keys(lock.dependencies).length;
114
+ console.log(`Dependencies installed: ${count} package(s) locked.`);
115
+ }
116
+ export async function cacheClear() {
117
+ const cacheDir = path.join(os.homedir(), '.dlang', 'cache');
118
+ try {
119
+ await fs.rm(cacheDir, { recursive: true, force: true });
120
+ console.log('Cache cleared successfully.');
121
+ }
122
+ catch (error) {
123
+ console.error('Failed to clear cache:', error);
124
+ }
125
+ }
126
+ export async function showDependencyTree(workspaceRoot, options = {}) {
127
+ const manager = new WorkspaceManager({ autoResolve: false });
128
+ await manager.initialize(workspaceRoot);
129
+ const lock = await manager.getLockFile();
130
+ if (!lock || Object.keys(lock.dependencies).length === 0) {
131
+ console.log('No dependencies found. Run `domain-lang-cli install` first.');
132
+ return;
133
+ }
134
+ const analyzer = new DependencyAnalyzer();
135
+ const tree = await analyzer.buildDependencyTree(lock, workspaceRoot);
136
+ if (tree.length === 0) {
137
+ console.log('Dependency tree is empty.');
138
+ return;
139
+ }
140
+ console.log('Dependency tree:');
141
+ console.log(analyzer.formatDependencyTree(tree, { showCommits: options.commits }));
142
+ }
143
+ export async function showImpactAnalysis(workspaceRoot, packageName) {
144
+ const manager = new WorkspaceManager({ autoResolve: false });
145
+ await manager.initialize(workspaceRoot);
146
+ const lock = await manager.getLockFile();
147
+ if (!lock) {
148
+ console.log('No lock file found. Run `domain-lang-cli install` first.');
149
+ return;
150
+ }
151
+ const analyzer = new DependencyAnalyzer();
152
+ const reverseDeps = await analyzer.findReverseDependencies(packageName, lock, workspaceRoot);
153
+ if (reverseDeps.length === 0) {
154
+ console.log(`No packages depend on "${packageName}".`);
155
+ return;
156
+ }
157
+ console.log(`Packages depending on "${packageName}":`);
158
+ for (const dep of reverseDeps) {
159
+ const typeLabel = dep.type === 'direct' ? '→' : '⇢';
160
+ console.log(` ${typeLabel} ${dep.dependentPackage}@${dep.version}`);
161
+ }
162
+ }
163
+ export async function validateModel(workspaceRoot) {
164
+ const manager = new WorkspaceManager({ autoResolve: false });
165
+ await manager.initialize(workspaceRoot);
166
+ const lock = await manager.getLockFile();
167
+ if (!lock) {
168
+ console.log('No lock file found. Run `domain-lang-cli install` first.');
169
+ return;
170
+ }
171
+ const analyzer = new DependencyAnalyzer();
172
+ const cycles = await analyzer.detectCircularDependencies(lock);
173
+ if (cycles.length > 0) {
174
+ console.log('\u26a0 Circular dependencies detected:');
175
+ for (const cycle of cycles) {
176
+ console.log(` ${cycle.join(' \u2192 ')}`);
177
+ }
178
+ return;
179
+ }
180
+ console.log('\u2713 No circular dependencies detected.');
181
+ console.log('\u2713 Model structure is valid.');
182
+ }
183
+ export async function auditDependencies(workspaceRoot) {
184
+ const manager = new WorkspaceManager({ autoResolve: false });
185
+ await manager.initialize(workspaceRoot);
186
+ const lock = await manager.getLockFile();
187
+ if (!lock) {
188
+ console.log('No lock file found. Run `domain-lang-cli install` first.');
189
+ return;
190
+ }
191
+ const policy = await loadGovernancePolicy(workspaceRoot);
192
+ const validator = new GovernanceValidator(policy);
193
+ const report = await validator.generateAuditReport(lock, workspaceRoot);
194
+ console.log(report);
195
+ }
196
+ export async function checkCompliance(workspaceRoot) {
197
+ const manager = new WorkspaceManager({ autoResolve: false });
198
+ await manager.initialize(workspaceRoot);
199
+ const lock = await manager.getLockFile();
200
+ if (!lock) {
201
+ console.log('No lock file found. Run `domain-lang-cli install` first.');
202
+ return;
203
+ }
204
+ const policy = await loadGovernancePolicy(workspaceRoot);
205
+ const validator = new GovernanceValidator(policy);
206
+ const violations = await validator.validate(lock, workspaceRoot);
207
+ if (violations.length === 0) {
208
+ console.log('\u2713 All dependencies comply with governance policies.');
209
+ return;
210
+ }
211
+ console.log(`\u26a0 Found ${violations.length} policy violation(s):\n`);
212
+ for (const violation of violations) {
213
+ const icon = violation.severity === 'error' ? '\u2717' : '\u26a0';
214
+ console.log(`${icon} [${violation.severity.toUpperCase()}] ${violation.packageKey}`);
215
+ console.log(` ${violation.message}\n`);
216
+ }
217
+ }
218
+ //# sourceMappingURL=dependency-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-commands.js","sourceRoot":"","sources":["../src/dependency-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Model } from '@domainlang/language';
2
+ export declare function generateJavaScript(model: Model, filePath: string, destination: string | undefined): string;
@@ -0,0 +1,16 @@
1
+ import { CompositeGeneratorNode, NL, toString } from 'langium/generate';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { extractDestinationAndName } from './cli-util.js';
5
+ export function generateJavaScript(model, filePath, destination) {
6
+ const data = extractDestinationAndName(filePath, destination);
7
+ const generatedFilePath = `${path.join(data.destination, data.name)}.js`;
8
+ const fileNode = new CompositeGeneratorNode();
9
+ fileNode.append('"use strict";', NL, NL);
10
+ if (!fs.existsSync(data.destination)) {
11
+ fs.mkdirSync(data.destination, { recursive: true });
12
+ }
13
+ fs.writeFileSync(generatedFilePath, toString(fileNode));
14
+ return generatedFilePath;
15
+ }
16
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,QAAgB,EAAE,WAA+B;IAC9F,MAAM,IAAI,GAAG,yBAAyB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,iBAAiB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAEzE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC9C,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,OAAO,iBAAiB,CAAC;AAC7B,CAAC"}
package/out/main.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare const generateAction: (fileName: string, opts: GenerateOptions) => Promise<void>;
2
+ export type GenerateOptions = {
3
+ destination?: string;
4
+ profile?: boolean;
5
+ };
6
+ export default function (): void;
package/out/main.js ADDED
@@ -0,0 +1,147 @@
1
+ import { listModels, installModels, addModel, removeModel, statusModels, updateModel, cacheClear, showDependencyTree, showImpactAnalysis, validateModel, auditDependencies, checkCompliance } from './dependency-commands.js';
2
+ import chalk from 'chalk';
3
+ import { Command } from 'commander';
4
+ import { DomainLangLanguageMetaData, createDomainLangServices } from '@domainlang/language';
5
+ import { extractAstNode } from './cli-util.js';
6
+ import { generateJavaScript } from './generator.js';
7
+ import { NodeFileSystem } from 'langium/node';
8
+ import { performance } from 'node:perf_hooks';
9
+ import * as url from 'node:url';
10
+ import * as fs from 'node:fs/promises';
11
+ import * as path from 'node:path';
12
+ const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
13
+ const packagePath = path.resolve(__dirname, '..', '..', 'package.json');
14
+ const packageContent = await fs.readFile(packagePath, 'utf-8');
15
+ export const generateAction = async (fileName, opts) => {
16
+ try {
17
+ const services = createDomainLangServices(NodeFileSystem).DomainLang;
18
+ // Simple performance tracking if requested
19
+ const startTime = opts.profile ? performance.now() : 0;
20
+ let parseTime = 0;
21
+ if (opts.profile) {
22
+ console.log(chalk.blue('🔍 Performance profiling enabled'));
23
+ const parseStart = performance.now();
24
+ const model = await extractAstNode(fileName, services);
25
+ parseTime = performance.now() - parseStart;
26
+ const generatedFilePath = generateJavaScript(model, fileName, opts.destination);
27
+ const totalTime = performance.now() - startTime;
28
+ // Display profiling results
29
+ console.log(chalk.blue('\n📊 Performance Profile:'));
30
+ console.log(chalk.gray('─'.repeat(60)));
31
+ console.log(chalk.cyan(` Total Time: ${totalTime.toFixed(2)}ms`));
32
+ console.log(chalk.gray(` - Parsing: ${parseTime.toFixed(2)}ms`));
33
+ console.log(chalk.gray('─'.repeat(60)));
34
+ console.log(chalk.green('✓ JavaScript code generated successfully:'), chalk.cyan(generatedFilePath));
35
+ }
36
+ else {
37
+ const model = await extractAstNode(fileName, services);
38
+ const generatedFilePath = generateJavaScript(model, fileName, opts.destination);
39
+ console.log(chalk.green('✓ JavaScript code generated successfully:'), chalk.cyan(generatedFilePath));
40
+ }
41
+ }
42
+ catch (error) {
43
+ const message = error instanceof Error ? error.message : String(error);
44
+ console.error(chalk.red('✗ Generation failed:'), message);
45
+ process.exit(1);
46
+ }
47
+ };
48
+ export default function () {
49
+ const program = new Command();
50
+ program.version(JSON.parse(packageContent).version);
51
+ const fileExtensions = DomainLangLanguageMetaData.fileExtensions.join(', ');
52
+ program
53
+ .command('generate')
54
+ .argument('<file>', `source file (possible file extensions: ${fileExtensions})`)
55
+ .option('-d, --destination <dir>', 'destination directory of generating')
56
+ .option('-p, --profile', 'enable performance profiling')
57
+ .description('generates JavaScript code that prints "Hello, {name}!" for each greeting in a source file')
58
+ .action(generateAction);
59
+ // Model dependency management commands
60
+ program
61
+ .command('model')
62
+ .description('Manage model dependencies')
63
+ .action(() => {
64
+ console.log('Use: model list|add|remove|status|update');
65
+ });
66
+ program
67
+ .command('model list')
68
+ .description('List all model dependencies')
69
+ .action(async () => {
70
+ await listModels(process.cwd());
71
+ });
72
+ program
73
+ .command('model add')
74
+ .description('Add a model dependency')
75
+ .argument('<name>', 'dependency name')
76
+ .argument('<source>', 'git source (e.g., owner/repo)')
77
+ .argument('[version]', 'version constraint (default: main)', 'main')
78
+ .action(async (name, source, version) => {
79
+ await addModel(process.cwd(), name, source, version);
80
+ });
81
+ program
82
+ .command('model remove')
83
+ .description('Remove a model dependency')
84
+ .argument('<name>', 'dependency name')
85
+ .action(async (name) => {
86
+ await removeModel(process.cwd(), name);
87
+ });
88
+ program
89
+ .command('model status')
90
+ .description('Check dependency status')
91
+ .action(async () => {
92
+ await statusModels(process.cwd());
93
+ });
94
+ program
95
+ .command('model update')
96
+ .description('Update dependencies')
97
+ .argument('[name]', 'specific dependency to update (optional)')
98
+ .action(async (name) => {
99
+ await updateModel(process.cwd(), name);
100
+ });
101
+ program
102
+ .command('install')
103
+ .description('Install all model dependencies and generate lock file')
104
+ .action(async () => {
105
+ await installModels(process.cwd());
106
+ });
107
+ program
108
+ .command('cache-clear')
109
+ .description('Clear the dependency cache')
110
+ .action(async () => {
111
+ await cacheClear();
112
+ });
113
+ program
114
+ .command('model tree')
115
+ .description('Show dependency tree')
116
+ .option('-c, --commits', 'Show commit hashes')
117
+ .action(async (opts) => {
118
+ await showDependencyTree(process.cwd(), { commits: opts.commits });
119
+ });
120
+ program
121
+ .command('model deps')
122
+ .description('Show packages that depend on a given package')
123
+ .argument('<package>', 'package name (e.g., owner/repo)')
124
+ .action(async (packageName) => {
125
+ await showImpactAnalysis(process.cwd(), packageName);
126
+ });
127
+ program
128
+ .command('model validate')
129
+ .description('Validate model structure and dependencies')
130
+ .action(async () => {
131
+ await validateModel(process.cwd());
132
+ });
133
+ program
134
+ .command('model audit')
135
+ .description('Generate governance audit report')
136
+ .action(async () => {
137
+ await auditDependencies(process.cwd());
138
+ });
139
+ program
140
+ .command('model compliance')
141
+ .description('Check compliance with governance policies')
142
+ .action(async () => {
143
+ await checkCompliance(process.cwd());
144
+ });
145
+ program.parse(process.argv);
146
+ }
147
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/out/util.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import type { AstNode, LangiumCoreServices, LangiumDocument } from 'langium';
2
+ export declare function extractDocument(fileName: string, services: LangiumCoreServices): Promise<LangiumDocument>;
3
+ export declare function extractAstNode<T extends AstNode>(fileName: string, services: LangiumCoreServices): Promise<T>;
4
+ interface FilePathData {
5
+ destination: string;
6
+ name: string;
7
+ }
8
+ export declare function extractDestinationAndName(filePath: string, destination: string | undefined): FilePathData;
9
+ export {};
package/out/util.js ADDED
@@ -0,0 +1,37 @@
1
+ import chalk from 'chalk';
2
+ import * as path from 'node:path';
3
+ import * as fs from 'node:fs';
4
+ import { URI } from 'langium';
5
+ export async function extractDocument(fileName, services) {
6
+ const extensions = services.LanguageMetaData.fileExtensions;
7
+ if (!extensions.includes(path.extname(fileName))) {
8
+ console.error(chalk.yellow(`Please choose a file with one of these extensions: ${extensions}.`));
9
+ process.exit(1);
10
+ }
11
+ if (!fs.existsSync(fileName)) {
12
+ console.error(chalk.red(`File ${fileName} does not exist.`));
13
+ process.exit(1);
14
+ }
15
+ const document = await services.shared.workspace.LangiumDocuments.getOrCreateDocument(URI.file(path.resolve(fileName)));
16
+ await services.shared.workspace.DocumentBuilder.build([document], { validation: true });
17
+ const validationErrors = (document.diagnostics ?? []).filter(e => e.severity === 1);
18
+ if (validationErrors.length > 0) {
19
+ console.error(chalk.red('There are validation errors:'));
20
+ for (const validationError of validationErrors) {
21
+ console.error(chalk.red(`line ${validationError.range.start.line + 1}: ${validationError.message} [${document.textDocument.getText(validationError.range)}]`));
22
+ }
23
+ process.exit(1);
24
+ }
25
+ return document;
26
+ }
27
+ export async function extractAstNode(fileName, services) {
28
+ return (await extractDocument(fileName, services)).parseResult?.value;
29
+ }
30
+ export function extractDestinationAndName(filePath, destination) {
31
+ filePath = path.basename(filePath, path.extname(filePath)).replace(/[.-]/g, '');
32
+ return {
33
+ destination: destination ?? path.join(path.dirname(filePath), 'generated'),
34
+ name: path.basename(filePath)
35
+ };
36
+ }
37
+ //# sourceMappingURL=util.js.map