@afroze9/terrastudio-cli 0.42.2 → 0.47.2

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