@afroze9/terrastudio-cli 0.42.4 → 0.48.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.
Files changed (38) hide show
  1. package/bundle/cli.cjs +29866 -0
  2. package/package.json +6 -13
  3. package/dist/cli.d.ts +0 -3
  4. package/dist/cli.d.ts.map +0 -1
  5. package/dist/cli.js +0 -20
  6. package/dist/cli.js.map +0 -1
  7. package/dist/commands/hcl.d.ts +0 -3
  8. package/dist/commands/hcl.d.ts.map +0 -1
  9. package/dist/commands/hcl.js +0 -158
  10. package/dist/commands/hcl.js.map +0 -1
  11. package/dist/commands/module.d.ts +0 -3
  12. package/dist/commands/module.d.ts.map +0 -1
  13. package/dist/commands/module.js +0 -277
  14. package/dist/commands/module.js.map +0 -1
  15. package/dist/commands/project.d.ts +0 -3
  16. package/dist/commands/project.d.ts.map +0 -1
  17. package/dist/commands/project.js +0 -137
  18. package/dist/commands/project.js.map +0 -1
  19. package/dist/commands/resource.d.ts +0 -3
  20. package/dist/commands/resource.d.ts.map +0 -1
  21. package/dist/commands/resource.js +0 -366
  22. package/dist/commands/resource.js.map +0 -1
  23. package/dist/commands/terraform.d.ts +0 -3
  24. package/dist/commands/terraform.d.ts.map +0 -1
  25. package/dist/commands/terraform.js +0 -199
  26. package/dist/commands/terraform.js.map +0 -1
  27. package/dist/index.d.ts +0 -3
  28. package/dist/index.d.ts.map +0 -1
  29. package/dist/index.js +0 -4
  30. package/dist/index.js.map +0 -1
  31. package/dist/platform/node-io.d.ts +0 -29
  32. package/dist/platform/node-io.d.ts.map +0 -1
  33. package/dist/platform/node-io.js +0 -61
  34. package/dist/platform/node-io.js.map +0 -1
  35. package/dist/platform/resolve-project.d.ts +0 -9
  36. package/dist/platform/resolve-project.d.ts.map +0 -1
  37. package/dist/platform/resolve-project.js +0 -41
  38. package/dist/platform/resolve-project.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@afroze9/terrastudio-cli",
3
- "version": "0.42.4",
3
+ "version": "0.48.0",
4
4
  "description": "CLI for TerraStudio — headless project manipulation and HCL generation",
5
5
  "author": "afroze9",
6
6
  "license": "AGPL-3.0-only",
@@ -14,16 +14,10 @@
14
14
  },
15
15
  "type": "module",
16
16
  "bin": {
17
- "tstudio": "./dist/cli.js"
18
- },
19
- "exports": {
20
- ".": {
21
- "types": "./dist/index.d.ts",
22
- "import": "./dist/index.js"
23
- }
17
+ "tstudio": "./bundle/cli.cjs"
24
18
  },
25
19
  "files": [
26
- "dist"
20
+ "bundle"
27
21
  ],
28
22
  "scripts": {
29
23
  "build": "tsc -p tsconfig.json",
@@ -37,7 +31,8 @@
37
31
  "assets": [],
38
32
  "outputPath": "bin"
39
33
  },
40
- "dependencies": {
34
+ "devDependencies": {
35
+ "@clack/prompts": "^1.1.0",
41
36
  "@terrastudio/core": "workspace:*",
42
37
  "@terrastudio/platform-node": "workspace:*",
43
38
  "@terrastudio/plugin-aws-compute": "workspace:*",
@@ -50,11 +45,9 @@
50
45
  "@terrastudio/plugin-azure-storage": "workspace:*",
51
46
  "@terrastudio/project": "workspace:*",
52
47
  "@terrastudio/types": "workspace:*",
53
- "commander": "^12.1.0"
54
- },
55
- "devDependencies": {
56
48
  "@types/node": "^25.5.0",
57
49
  "@yao-pkg/pkg": "^6.14.1",
50
+ "commander": "^12.1.0",
58
51
  "esbuild": "^0.27.4",
59
52
  "typescript": "^5.7.0"
60
53
  }
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js DELETED
@@ -1,20 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import { makeProjectCommand } from './commands/project.js';
4
- import { makeResourceCommand } from './commands/resource.js';
5
- import { makeHclCommand } from './commands/hcl.js';
6
- import { makeModuleCommand } from './commands/module.js';
7
- import { makeTerraformCommand } from './commands/terraform.js';
8
- const version = typeof TSTUDIO_VERSION !== 'undefined' ? TSTUDIO_VERSION : '0.0.0-dev';
9
- const program = new Command();
10
- program
11
- .name('tstudio')
12
- .description('TerraStudio CLI — headless project manipulation and HCL generation')
13
- .version(version);
14
- program.addCommand(makeProjectCommand());
15
- program.addCommand(makeResourceCommand());
16
- program.addCommand(makeHclCommand());
17
- program.addCommand(makeModuleCommand());
18
- program.addCommand(makeTerraformCommand());
19
- program.parse(process.argv);
20
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAK/D,MAAM,OAAO,GAAG,OAAO,eAAe,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;AAEvF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAE3C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function makeHclCommand(): Command;
3
- //# sourceMappingURL=hcl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hcl.d.ts","sourceRoot":"","sources":["../../src/commands/hcl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,cAAc,IAAI,OAAO,CAqLxC"}
@@ -1,158 +0,0 @@
1
- import { Command } from 'commander';
2
- import { storage, loadRegistry, toLoadedProject } from '../platform/node-io.js';
3
- import { Project } from '@terrastudio/project';
4
- import { HclPipeline, EdgeRuleValidator, validateDiagram, validateNetworkTopology } from '@terrastudio/core';
5
- import { convertToResourceInstances, extractOutputBindings } from '@terrastudio/project';
6
- import path from 'node:path';
7
- import { resolveProjectPath } from '../platform/resolve-project.js';
8
- export function makeHclCommand() {
9
- const cmd = new Command('hcl').description('HCL generation and inspection');
10
- cmd
11
- .command('generate [path]')
12
- .description('Generate Terraform HCL from the diagram and write to terraform/')
13
- .option('--dry-run', 'Print files to stdout instead of writing to disk')
14
- .option('--file <filename>', 'With --dry-run: show only a specific file (e.g. main.tf)')
15
- .option('--no-validate', 'Skip diagram and network topology validation')
16
- .action(async (projectPath, options) => {
17
- const resolved = resolveProjectPath(projectPath);
18
- const stored = await storage.loadProject(resolved);
19
- const project = Project.fromLoaded(toLoadedProject(stored));
20
- const providers = (project.projectConfig.activeProviders ?? ['azurerm']);
21
- process.stderr.write(`Loading plugins for: [${providers.join(', ')}]...\n`);
22
- const registry = await loadRegistry(providers);
23
- const connectionRules = registry.getConnectionRules();
24
- const getSchema = (typeId) => registry.getResourceSchema(typeId);
25
- // Convert diagram nodes + edges to ResourceInstances
26
- const resources = convertToResourceInstances(project.nodes, project.edges, connectionRules, getSchema, project.projectConfig);
27
- // Diagram validation
28
- if (options.validate !== false) {
29
- const validation = validateDiagram(resources, registry);
30
- if (!validation.valid) {
31
- for (const diagramError of validation.errors) {
32
- console.error(` ✗ [${diagramError.label}] ${diagramError.errors.map((e) => e.message).join(', ')}`);
33
- }
34
- console.error(`\nDiagram validation failed (${validation.errors.length} resource(s) with errors).`);
35
- process.exit(1);
36
- }
37
- // Network topology validation (CIDR containment + overlap)
38
- const topologyNodes = project.nodes.filter((n) => n.type !== undefined);
39
- const topologyErrors = validateNetworkTopology(topologyNodes);
40
- const hardErrors = topologyErrors.filter((te) => te.errors.some((e) => e.severity === 'error'));
41
- const warnings = topologyErrors.filter((te) => te.errors.some((e) => e.severity === 'warning'));
42
- for (const te of warnings) {
43
- const node = project.nodes.find((n) => n.id === te.instanceId);
44
- const label = node?.data?.label ?? te.instanceId;
45
- for (const e of te.errors.filter((x) => x.severity === 'warning')) {
46
- console.warn(` ⚠ [${label}] ${e.message}`);
47
- }
48
- }
49
- if (hardErrors.length > 0) {
50
- for (const te of hardErrors) {
51
- const node = project.nodes.find((n) => n.id === te.instanceId);
52
- const label = node?.data?.label ?? te.instanceId;
53
- for (const e of te.errors.filter((x) => x.severity === 'error')) {
54
- console.error(` ✗ [${label}] ${e.message}`);
55
- }
56
- }
57
- console.error('\nNetwork topology validation failed. Fix CIDR issues and try again.');
58
- process.exit(1);
59
- }
60
- }
61
- // Extract output bindings from edges
62
- const edgeValidator = new EdgeRuleValidator(connectionRules);
63
- const bindings = extractOutputBindings(project.edges, project.nodes, edgeValidator);
64
- // Run HCL pipeline
65
- const pipeline = new HclPipeline(registry);
66
- const result = pipeline.generate({
67
- resources,
68
- projectConfig: project.projectConfig,
69
- bindings,
70
- modules: project.modules,
71
- moduleInstances: project.moduleInstances,
72
- });
73
- // Pipeline-level validation errors
74
- if (result.errors && result.errors.length > 0) {
75
- for (const err of result.errors) {
76
- console.error(` ✗ ${err.message}`);
77
- }
78
- console.error('\nHCL generation blocked by validation errors.');
79
- process.exit(1);
80
- }
81
- // Filter empty files
82
- const fileMap = {};
83
- for (const [name, content] of Object.entries(result.files)) {
84
- if (content && content.trim()) {
85
- fileMap[name] = content;
86
- }
87
- }
88
- if (options.dryRun) {
89
- // Print to stdout
90
- if (options.file) {
91
- const content = fileMap[options.file];
92
- if (content === undefined) {
93
- console.error(`File not found: ${options.file}`);
94
- console.error(`Generated files: ${Object.keys(fileMap).join(', ')}`);
95
- process.exit(1);
96
- }
97
- console.log(`# ${options.file}`);
98
- console.log(content);
99
- }
100
- else {
101
- for (const [filename, content] of Object.entries(fileMap)) {
102
- console.log(`# ${filename}`);
103
- console.log(content);
104
- console.log('');
105
- }
106
- }
107
- }
108
- else {
109
- await storage.writeTerraformFiles(resolved, fileMap);
110
- const tfDir = path.join(resolved, 'terraform');
111
- console.log(`Generated ${Object.keys(fileMap).length} file(s) to: ${tfDir}`);
112
- for (const filename of Object.keys(fileMap).sort()) {
113
- console.log(` ${filename}`);
114
- }
115
- if (result.collectedVariables.length > 0) {
116
- console.log(`\nVariables declared: ${result.collectedVariables.length}`);
117
- for (const v of result.collectedVariables) {
118
- const note = v.sensitive ? ' (sensitive)' : '';
119
- console.log(` var.${v.name}${note}`);
120
- }
121
- }
122
- }
123
- });
124
- cmd
125
- .command('show [path]')
126
- .description('Print existing Terraform files from the terraform/ directory')
127
- .option('--file <filename>', 'Show only a specific file (e.g. main.tf)')
128
- .action(async (projectPath, options) => {
129
- const resolved = resolveProjectPath(projectPath);
130
- const stored = await storage.loadProject(resolved);
131
- Project.fromLoaded(toLoadedProject(stored)); // validate project loads
132
- const files = await storage.readTerraformFiles(resolved);
133
- if (Object.keys(files).length === 0) {
134
- console.log('No Terraform files found in terraform/ directory.');
135
- console.log('Run: tstudio hcl generate <path>');
136
- return;
137
- }
138
- if (options.file) {
139
- const content = files[options.file];
140
- if (content === undefined) {
141
- console.error(`File not found: ${options.file}`);
142
- console.error(`Available: ${Object.keys(files).join(', ')}`);
143
- process.exit(1);
144
- }
145
- console.log(`# ${options.file}`);
146
- console.log(content);
147
- }
148
- else {
149
- for (const [filename, content] of Object.entries(files)) {
150
- console.log(`# ${filename}`);
151
- console.log(content);
152
- console.log('');
153
- }
154
- }
155
- });
156
- return cmd;
157
- }
158
- //# sourceMappingURL=hcl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hcl.js","sourceRoot":"","sources":["../../src/commands/hcl.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function makeModuleCommand(): Command;
3
- //# sourceMappingURL=module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/commands/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,iBAAiB,IAAI,OAAO,CAwW3C"}
@@ -1,277 +0,0 @@
1
- import { Command } from 'commander';
2
- import { storage, toLoadedProject } from '../platform/node-io.js';
3
- import { Project } from '@terrastudio/project';
4
- import { resolveProjectPath } from '../platform/resolve-project.js';
5
- function generateModuleId() {
6
- const ts = Date.now();
7
- const rand = Math.random().toString(36).slice(2, 8);
8
- return `mod-${ts}-${rand}`;
9
- }
10
- function generateInstanceId() {
11
- const ts = Date.now();
12
- const rand = Math.random().toString(36).slice(2, 8);
13
- return `modinst-${ts}-${rand}`;
14
- }
15
- export function makeModuleCommand() {
16
- const cmd = new Command('module').description('Manage diagram modules');
17
- // ─── module list ─────────────────────────────────────────────────────────────
18
- cmd
19
- .command('list [path]')
20
- .description('List all modules in the project')
21
- .action(async (projectPath) => {
22
- const resolved = resolveProjectPath(projectPath);
23
- const stored = await storage.loadProject(resolved);
24
- const project = Project.fromLoaded(toLoadedProject(stored));
25
- if (project.modules.length === 0) {
26
- console.log('No modules found.');
27
- return;
28
- }
29
- const colId = 'ID'.padEnd(32);
30
- const colName = 'Name'.padEnd(30);
31
- const colTemplate = 'IsTemplate'.padEnd(12);
32
- const colMembers = 'MemberCount';
33
- console.log(`${colId} ${colName} ${colTemplate} ${colMembers}`);
34
- console.log(`${'-'.repeat(32)} ${'-'.repeat(30)} ${'-'.repeat(12)} ${'-'.repeat(11)}`);
35
- for (const mod of project.modules) {
36
- const memberCount = project.nodes.filter((n) => n.data.moduleId === mod.id).length;
37
- const id = mod.id.padEnd(32);
38
- const name = mod.name.padEnd(30);
39
- const isTemplate = String(mod.isTemplate ?? false).padEnd(12);
40
- console.log(`${id} ${name} ${isTemplate} ${memberCount}`);
41
- }
42
- });
43
- // ─── module create ────────────────────────────────────────────────────────────
44
- cmd
45
- .command('create [path] <name>')
46
- .description('Create a new module grouping resources')
47
- .requiredOption('--members <nodeIds...>', 'Node IDs to include in the module')
48
- .option('--template', 'Make this module a reusable template')
49
- .action(async (projectPath, name, options) => {
50
- const resolved = resolveProjectPath(projectPath);
51
- const stored = await storage.loadProject(resolved);
52
- const project = Project.fromLoaded(toLoadedProject(stored));
53
- // Validate all member nodes exist
54
- for (const nodeId of options.members) {
55
- if (!project.getNode(nodeId)) {
56
- console.error(`Node not found: ${nodeId}`);
57
- process.exit(1);
58
- }
59
- }
60
- const moduleId = generateModuleId();
61
- const mod = {
62
- id: moduleId,
63
- name,
64
- collapsed: false,
65
- position: { x: 0, y: 0 },
66
- ...(options.template ? { isTemplate: true } : {}),
67
- };
68
- project.modules = [...project.modules, mod];
69
- // Set moduleId on each member node
70
- for (const nodeId of options.members) {
71
- const node = project.getNode(nodeId);
72
- project.updateNode(nodeId, {
73
- data: { ...node.data, moduleId },
74
- });
75
- }
76
- await storage.saveDiagram(resolved, project.toDiagramSnapshot());
77
- console.log(`Created module "${name}" (${moduleId}) with ${options.members.length} member(s).`);
78
- });
79
- // ─── module delete ────────────────────────────────────────────────────────────
80
- cmd
81
- .command('delete [path] <moduleId>')
82
- .description('Delete a module (does not delete member resources)')
83
- .action(async (projectPath, moduleId) => {
84
- const resolved = resolveProjectPath(projectPath);
85
- const stored = await storage.loadProject(resolved);
86
- const project = Project.fromLoaded(toLoadedProject(stored));
87
- const mod = project.modules.find((m) => m.id === moduleId);
88
- if (!mod) {
89
- console.error(`Module not found: ${moduleId}`);
90
- process.exit(1);
91
- }
92
- // Clear moduleId from member nodes
93
- const members = project.nodes.filter((n) => n.data.moduleId === moduleId);
94
- for (const node of members) {
95
- project.updateNode(node.id, {
96
- data: { ...node.data, moduleId: undefined },
97
- });
98
- }
99
- project.modules = project.modules.filter((m) => m.id !== moduleId);
100
- await storage.saveDiagram(resolved, project.toDiagramSnapshot());
101
- console.log(`Deleted module: ${mod.name} (${moduleId})`);
102
- });
103
- // ─── module rename ────────────────────────────────────────────────────────────
104
- cmd
105
- .command('rename [path] <moduleId> <newName>')
106
- .description('Rename a module')
107
- .action(async (projectPath, moduleId, newName) => {
108
- const resolved = resolveProjectPath(projectPath);
109
- const stored = await storage.loadProject(resolved);
110
- const project = Project.fromLoaded(toLoadedProject(stored));
111
- const mod = project.modules.find((m) => m.id === moduleId);
112
- if (!mod) {
113
- console.error(`Module not found: ${moduleId}`);
114
- process.exit(1);
115
- }
116
- project.modules = project.modules.map((m) => m.id === moduleId ? { ...m, name: newName } : m);
117
- await storage.saveDiagram(resolved, project.toDiagramSnapshot());
118
- console.log(`Renamed module ${moduleId}: "${mod.name}" -> "${newName}"`);
119
- });
120
- // ─── module add-members ───────────────────────────────────────────────────────
121
- cmd
122
- .command('add-members [path] <moduleId>')
123
- .description('Add nodes to a module')
124
- .requiredOption('--members <nodeIds...>', 'Node IDs to add')
125
- .action(async (projectPath, moduleId, options) => {
126
- const resolved = resolveProjectPath(projectPath);
127
- const stored = await storage.loadProject(resolved);
128
- const project = Project.fromLoaded(toLoadedProject(stored));
129
- const mod = project.modules.find((m) => m.id === moduleId);
130
- if (!mod) {
131
- console.error(`Module not found: ${moduleId}`);
132
- process.exit(1);
133
- }
134
- for (const nodeId of options.members) {
135
- const node = project.getNode(nodeId);
136
- if (!node) {
137
- console.error(`Node not found: ${nodeId}`);
138
- process.exit(1);
139
- }
140
- project.updateNode(nodeId, {
141
- data: { ...node.data, moduleId },
142
- });
143
- }
144
- await storage.saveDiagram(resolved, project.toDiagramSnapshot());
145
- console.log(`Added ${options.members.length} member(s) to module ${moduleId}.`);
146
- });
147
- // ─── module remove-members ────────────────────────────────────────────────────
148
- cmd
149
- .command('remove-members [path] <moduleId>')
150
- .description('Remove nodes from a module')
151
- .requiredOption('--members <nodeIds...>', 'Node IDs to remove')
152
- .action(async (projectPath, moduleId, options) => {
153
- const resolved = resolveProjectPath(projectPath);
154
- const stored = await storage.loadProject(resolved);
155
- const project = Project.fromLoaded(toLoadedProject(stored));
156
- if (!project.modules.find((m) => m.id === moduleId)) {
157
- console.error(`Module not found: ${moduleId}`);
158
- process.exit(1);
159
- }
160
- for (const nodeId of options.members) {
161
- const node = project.getNode(nodeId);
162
- if (!node) {
163
- console.error(`Node not found: ${nodeId}`);
164
- process.exit(1);
165
- }
166
- project.updateNode(nodeId, {
167
- data: { ...node.data, moduleId: undefined },
168
- });
169
- }
170
- await storage.saveDiagram(resolved, project.toDiagramSnapshot());
171
- console.log(`Removed ${options.members.length} member(s) from module ${moduleId}.`);
172
- });
173
- // ─── module instances ─────────────────────────────────────────────────────────
174
- const instancesCmd = new Command('instances').description('Manage module template instances');
175
- instancesCmd
176
- .command('list [path]')
177
- .description('List module instances')
178
- .option('--template <templateId>', 'Filter by template module ID')
179
- .action(async (projectPath, options) => {
180
- const resolved = resolveProjectPath(projectPath);
181
- const stored = await storage.loadProject(resolved);
182
- const project = Project.fromLoaded(toLoadedProject(stored));
183
- let instances = project.moduleInstances;
184
- if (options.template) {
185
- instances = instances.filter((i) => i.templateId === options.template);
186
- }
187
- if (instances.length === 0) {
188
- console.log('No module instances found.');
189
- return;
190
- }
191
- const colId = 'ID'.padEnd(32);
192
- const colTemplate = 'TemplateID'.padEnd(32);
193
- const colName = 'Name';
194
- console.log(`${colId} ${colTemplate} ${colName}`);
195
- console.log(`${'-'.repeat(32)} ${'-'.repeat(32)} ${'-'.repeat(30)}`);
196
- for (const inst of instances) {
197
- const id = inst.id.padEnd(32);
198
- const templateId = inst.templateId.padEnd(32);
199
- console.log(`${id} ${templateId} ${inst.name}`);
200
- }
201
- });
202
- instancesCmd
203
- .command('create [path] <templateModuleId> <instanceName>')
204
- .description('Create a new module instance from a template')
205
- .action(async (projectPath, templateModuleId, instanceName) => {
206
- const resolved = resolveProjectPath(projectPath);
207
- const stored = await storage.loadProject(resolved);
208
- const project = Project.fromLoaded(toLoadedProject(stored));
209
- const template = project.modules.find((m) => m.id === templateModuleId);
210
- if (!template) {
211
- console.error(`Template module not found: ${templateModuleId}`);
212
- process.exit(1);
213
- }
214
- if (!template.isTemplate) {
215
- console.error(`Module ${templateModuleId} is not a template. Set isTemplate via the desktop app.`);
216
- process.exit(1);
217
- }
218
- const instanceId = generateInstanceId();
219
- const instance = {
220
- id: instanceId,
221
- templateId: templateModuleId,
222
- name: instanceName,
223
- position: { x: 0, y: 0 },
224
- variableValues: {},
225
- };
226
- project.moduleInstances = [...project.moduleInstances, instance];
227
- await storage.saveDiagram(resolved, project.toDiagramSnapshot());
228
- console.log(`Created instance "${instanceName}" (${instanceId}) from template ${templateModuleId}.`);
229
- });
230
- instancesCmd
231
- .command('delete [path] <instanceId>')
232
- .description('Delete a module instance')
233
- .action(async (projectPath, instanceId) => {
234
- const resolved = resolveProjectPath(projectPath);
235
- const stored = await storage.loadProject(resolved);
236
- const project = Project.fromLoaded(toLoadedProject(stored));
237
- const instance = project.moduleInstances.find((i) => i.id === instanceId);
238
- if (!instance) {
239
- console.error(`Instance not found: ${instanceId}`);
240
- process.exit(1);
241
- }
242
- project.moduleInstances = project.moduleInstances.filter((i) => i.id !== instanceId);
243
- await storage.saveDiagram(resolved, project.toDiagramSnapshot());
244
- console.log(`Deleted instance: ${instance.name} (${instanceId})`);
245
- });
246
- instancesCmd
247
- .command('set-var [path] <instanceId>')
248
- .description('Set a variable value on a module instance')
249
- .requiredOption('--key <key>', 'Variable key')
250
- .requiredOption('--value <value>', 'Variable value')
251
- .action(async (projectPath, instanceId, options) => {
252
- const resolved = resolveProjectPath(projectPath);
253
- const stored = await storage.loadProject(resolved);
254
- const project = Project.fromLoaded(toLoadedProject(stored));
255
- const instance = project.moduleInstances.find((i) => i.id === instanceId);
256
- if (!instance) {
257
- console.error(`Instance not found: ${instanceId}`);
258
- process.exit(1);
259
- }
260
- project.moduleInstances = project.moduleInstances.map((i) => {
261
- if (i.id !== instanceId)
262
- return i;
263
- return {
264
- ...i,
265
- variableValues: {
266
- ...i.variableValues,
267
- [options.key]: options.value,
268
- },
269
- };
270
- });
271
- await storage.saveDiagram(resolved, project.toDiagramSnapshot());
272
- console.log(`Set ${options.key} = ${options.value} on instance ${instanceId}.`);
273
- });
274
- cmd.addCommand(instancesCmd);
275
- return cmd;
276
- }
277
- //# sourceMappingURL=module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/commands/module.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function makeProjectCommand(): Command;
3
- //# sourceMappingURL=project.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,kBAAkB,IAAI,OAAO,CA+I5C"}