@machineblocks/cli 0.1.0 → 0.1.1

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.
@@ -14,7 +14,7 @@
14
14
  The MachineBlocks host CLI library catalog
15
15
  </is>
16
16
  <version>
17
- 0.1.0
17
+ 0.1.1
18
18
  </version>
19
19
  <documentation>
20
20
  Publishable host-CLI library (com.machineblocks.bml.cli.Library).
@@ -8,7 +8,7 @@
8
8
  core:Documentation
9
9
  </baseType>
10
10
  <is>
11
- User-facing commands for rendering BML to SCAD
11
+ User-facing commands for a MachineBlocks project
12
12
  </is>
13
13
  <documentation><![CDATA[
14
14
  The host exposes a short command set. validate matches blockml validate.
@@ -67,13 +67,31 @@
67
67
  Mapping codes MB_TARGET_PACKAGE_UNDETERMINED, MB_TARGET_PACKAGE_AMBIGUOUS,
68
68
  and MB_SOURCE_OUTSIDE_ROOT are defined with the manifestation rules.
69
69
 
70
+ machineblocks init <package-fqn> [--src dir] [--install]
71
+ - Scaffolds a BlockML project by calling initProject from @blockml/cli,
72
+ then records the MachineBlocks profile. It does not spawn blockml init.
73
+ - --src changes the source directory (default blocks). --install runs
74
+ npm install after the profile is recorded. Without --install, init
75
+ does not install.
76
+ - The profile adds @machineblocks/cli to devDependencies when that package
77
+ is absent from dependencies and devDependencies. The range is the caret
78
+ range of this host. An existing dependencies entry stays put.
79
+ - The project Library.bml gains a dependencies composition child
80
+ com.machineblocks.bml.Library. An existing child is left in place.
81
+ Existing files are not replaced.
82
+ - A package FQN without a bml segment still exits 0 and warns. Compile
83
+ maps a bml segment to scad.
84
+ - Exit codes match initProject: 0 success, 1 write or install failure,
85
+ 2 usage or an invalid package FQN.
86
+ - --help shows this command.
87
+
70
88
  machineblocks --help
71
89
  - Lists these commands.
72
90
  - Points advanced users to blockml --help for search, inspect, graph,
73
- transform, new, and init.
91
+ transform, and new.
74
92
 
75
93
  Not in this host surface (still available via blockml if that package
76
- is installed): watch, search, inspect, graph, transform, scaffolding, xsd
94
+ is installed): watch, search, inspect, graph, transform, new, xsd
77
95
  toggle, thumbnail generation.
78
96
 
79
97
  Per-target matrix entry this host satisfies:
@@ -27,6 +27,9 @@
27
27
  BlockRenderEngine.
28
28
  - Same validate and compile facade underneath. Defaults differ.
29
29
  - Does not reimplement parse, validate, or emit.
30
+ - init calls initProject from @blockml/cli, then adds devDependency
31
+ @machineblocks/cli and library dependency com.machineblocks.bml.Library.
32
+ The universal init stays domain-agnostic.
30
33
 
31
34
  Interop: a later plugin load (targetPackages in blockml.config.json mapping
32
35
  machineblocks-v3-scad to @machineblocks/render-target) may let the universal
@@ -13,13 +13,21 @@
13
13
  <documentation>
14
14
  Consumer project (the usual path):
15
15
 
16
- npm install @machineblocks/cli
16
+ npx @machineblocks/cli init com.example.bml
17
17
  npx machineblocks validate
18
18
  npx machineblocks compile com.example.bml.bricks.MyBrick
19
19
 
20
+ init calls the universal project scaffold, then records @machineblocks/cli
21
+ as a devDependency and adds com.machineblocks.bml.Library to the project
22
+ library. Pass --install to run npm install after that profile is recorded.
23
+ Otherwise the next step is npm install. On a project that blockml init
24
+ already created, the same command adds only the missing profile and does
25
+ not replace existing files.
26
+
20
27
  That install brings @machineblocks/render-target, @blockml/block-render-engine,
21
- @machineblocks/core, and the BlockML compiler packages. The user does not
22
- install @blockml/cli unless they also want the universal command.
28
+ @machineblocks/core, and the BlockML compiler packages. init also records
29
+ @blockml/core and @blockml/cli. A bml segment in the package FQN lets
30
+ compile map the output package to scad.
23
31
 
24
32
  From this monorepo while the bin is not published:
25
33
 
package/dist/args.d.ts CHANGED
@@ -9,9 +9,16 @@ export interface CompileArgs {
9
9
  sourcePackage?: string;
10
10
  targetPackage?: string;
11
11
  }
12
+ export interface InitArgs {
13
+ command: "init";
14
+ packageFqn: string;
15
+ srcDir?: string;
16
+ install: boolean;
17
+ }
12
18
  export type HostCommand = {
13
19
  command: "help";
14
- } | ValidateArgs | CompileArgs | {
20
+ topic?: "init";
21
+ } | ValidateArgs | CompileArgs | InitArgs | {
15
22
  command: "usage";
16
23
  message: string;
17
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACnB,YAAY,GACZ,WAAW,GACX;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAY9D;AAyED,+EAA+E;AAC/E,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO9E"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,YAAY,GACZ,WAAW,GACX,QAAQ,GACR;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAe9D;AAoHD,+EAA+E;AAC/E,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO9E"}
package/dist/args.js CHANGED
@@ -1,4 +1,4 @@
1
- import { COMPILE_HELP } from "./help.js";
1
+ import { COMPILE_HELP, INIT_HELP } from "./help.js";
2
2
  export function parseArgs(argv) {
3
3
  if (argv.length === 0 || argv[0] === "--help" || argv[0] === "help") {
4
4
  return { command: "help" };
@@ -10,6 +10,9 @@ export function parseArgs(argv) {
10
10
  if (command === "compile") {
11
11
  return parseCompile(rest);
12
12
  }
13
+ if (command === "init") {
14
+ return parseInit(rest);
15
+ }
13
16
  return { command: "usage", message: `Unknown command: ${command ?? ""}` };
14
17
  }
15
18
  function parseValidate(args) {
@@ -82,6 +85,48 @@ function parseCompile(args) {
82
85
  }
83
86
  return parsed;
84
87
  }
88
+ function parseInit(args) {
89
+ if (args.includes("--help")) {
90
+ return { command: "help", topic: "init" };
91
+ }
92
+ let packageFqn;
93
+ let srcDir;
94
+ let install = false;
95
+ for (let index = 0; index < args.length; index += 1) {
96
+ const arg = args[index];
97
+ if (arg === undefined) {
98
+ continue;
99
+ }
100
+ if (arg === "--install") {
101
+ install = true;
102
+ continue;
103
+ }
104
+ if (arg === "--src") {
105
+ const value = args[index + 1];
106
+ if (value === undefined || value.startsWith("--")) {
107
+ return { command: "usage", message: "--src requires a directory." };
108
+ }
109
+ srcDir = value;
110
+ index += 1;
111
+ continue;
112
+ }
113
+ if (arg.startsWith("--")) {
114
+ return { command: "usage", message: `Unknown option: ${arg}` };
115
+ }
116
+ if (packageFqn !== undefined) {
117
+ return { command: "usage", message: "init accepts one package FQN." };
118
+ }
119
+ packageFqn = arg;
120
+ }
121
+ if (packageFqn === undefined) {
122
+ return { command: "usage", message: `init requires a package FQN.\n\n${INIT_HELP}` };
123
+ }
124
+ const parsed = { command: "init", packageFqn, install };
125
+ if (srcDir !== undefined) {
126
+ parsed.srcDir = srcDir;
127
+ }
128
+ return parsed;
129
+ }
85
130
  /** A final .* or .** segment denotes a package. An exact type FQN does not. */
86
131
  export function sourcePackageFromSelector(selector) {
87
132
  const parts = selector.split(".");
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAInE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAY5E"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKnE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAe5E"}
package/dist/execute.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import { parseArgs } from "./args.js";
2
2
  import { runCompile } from "./compile-command.js";
3
- import { HELP } from "./help.js";
3
+ import { HELP, INIT_HELP } from "./help.js";
4
+ import { runInit } from "./init-command.js";
4
5
  import { runValidate } from "./validate-command.js";
5
6
  export function execute(argv, rootDir) {
6
7
  const parsed = parseArgs(argv);
7
8
  if (parsed.command === "help") {
8
- return { code: 0, lines: [HELP] };
9
+ return { code: 0, lines: [parsed.topic === "init" ? INIT_HELP : HELP] };
9
10
  }
10
11
  if (parsed.command === "usage") {
11
12
  return { code: 2, lines: [parsed.message, "", HELP] };
@@ -13,6 +14,9 @@ export function execute(argv, rootDir) {
13
14
  if (parsed.command === "validate") {
14
15
  return runValidate(parsed, rootDir);
15
16
  }
17
+ if (parsed.command === "init") {
18
+ return runInit(parsed, rootDir);
19
+ }
16
20
  return runCompile(parsed, rootDir);
17
21
  }
18
22
  //# sourceMappingURL=execute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAmB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,UAAU,OAAO,CAAC,IAAuB,EAAE,OAAe;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAmB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,UAAU,OAAO,CAAC,IAAuB,EAAE,OAAe;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC"}
package/dist/help.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- export declare const HELP = "Usage: machineblocks validate [file] [--all]\n machineblocks compile <source-selector> [--source-package <FQN>] [--target-package <FQN>]\n machineblocks --help\n\nvalidate\n Same project check as blockml validate. Does not write SCAD.\n\ncompile\n Renders selected Block and Set types to SCAD with machineblocks-v3-scad.\n The selector is a BlockML type selector: an exact FQN, pkg.*, or pkg.**.\n Output is written under the configured srcDir (default blocks).\n --target-package names a package root, not a directory.\n A package selector supplies the source root when --source-package is omitted.\n An exact block FQN does not.\n\nExit 0 success, 1 diagnostics, 2 usage or config.\nSearch, inspect, graph, and the other toolchain commands stay on blockml.\n";
1
+ export declare const HELP = "Usage: machineblocks validate [file] [--all]\n machineblocks compile <source-selector> [--source-package <FQN>] [--target-package <FQN>]\n machineblocks init <package-fqn> [--src dir] [--install]\n machineblocks --help\n\nvalidate\n Same project check as blockml validate. Does not write SCAD.\n\ncompile\n Renders selected Block and Set types to SCAD with machineblocks-v3-scad.\n The selector is a BlockML type selector: an exact FQN, pkg.*, or pkg.**.\n Output is written under the configured srcDir (default blocks).\n --target-package names a package root, not a directory.\n A package selector supplies the source root when --source-package is omitted.\n An exact block FQN does not.\n\ninit\n Scaffolds a BlockML project and records the MachineBlocks profile.\n Adds devDependency @machineblocks/cli and library com.machineblocks.bml.Library.\n Does not run npm install unless --install is passed.\n\nExit 0 success, 1 diagnostics, 2 usage or config.\nSearch, inspect, graph, and new stay on blockml.\n";
2
2
  export declare const COMPILE_HELP = "Usage: machineblocks compile <source-selector> [--source-package <FQN>] [--target-package <FQN>]\n machineblocks compile --help\n\n<source-selector> Block FQN, or a package selector ending in .* or .**\n--source-package Source package root for an explicit mapping\n--target-package Target package root. Not a directory and not one output file.\n";
3
+ export declare const INIT_HELP = "Usage: machineblocks init <package-fqn> [--src dir] [--install]\n machineblocks init --help\n\n<package-fqn> Dotted package identifier. A bml segment is recommended.\n--src Source directory. Default blocks.\n--install Run npm install after the MachineBlocks profile is recorded.\n";
3
4
  //# sourceMappingURL=help.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,gxBAiBhB,CAAC;AAEF,eAAO,MAAM,YAAY,yWAMxB,CAAC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,khCAuBhB,CAAC;AAEF,eAAO,MAAM,YAAY,yWAMxB,CAAC;AAEF,eAAO,MAAM,SAAS,kTAMrB,CAAC"}
package/dist/help.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export const HELP = `Usage: machineblocks validate [file] [--all]
2
2
  machineblocks compile <source-selector> [--source-package <FQN>] [--target-package <FQN>]
3
+ machineblocks init <package-fqn> [--src dir] [--install]
3
4
  machineblocks --help
4
5
 
5
6
  validate
@@ -13,8 +14,13 @@ compile
13
14
  A package selector supplies the source root when --source-package is omitted.
14
15
  An exact block FQN does not.
15
16
 
17
+ init
18
+ Scaffolds a BlockML project and records the MachineBlocks profile.
19
+ Adds devDependency @machineblocks/cli and library com.machineblocks.bml.Library.
20
+ Does not run npm install unless --install is passed.
21
+
16
22
  Exit 0 success, 1 diagnostics, 2 usage or config.
17
- Search, inspect, graph, and the other toolchain commands stay on blockml.
23
+ Search, inspect, graph, and new stay on blockml.
18
24
  `;
19
25
  export const COMPILE_HELP = `Usage: machineblocks compile <source-selector> [--source-package <FQN>] [--target-package <FQN>]
20
26
  machineblocks compile --help
@@ -23,4 +29,11 @@ export const COMPILE_HELP = `Usage: machineblocks compile <source-selector> [--s
23
29
  --source-package Source package root for an explicit mapping
24
30
  --target-package Target package root. Not a directory and not one output file.
25
31
  `;
32
+ export const INIT_HELP = `Usage: machineblocks init <package-fqn> [--src dir] [--install]
33
+ machineblocks init --help
34
+
35
+ <package-fqn> Dotted package identifier. A bml segment is recommended.
36
+ --src Source directory. Default blocks.
37
+ --install Run npm install after the MachineBlocks profile is recorded.
38
+ `;
26
39
  //# sourceMappingURL=help.js.map
package/dist/help.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;CAiBnB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;CAM3B,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBnB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;CAM3B,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;CAMxB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { InitArgs } from "./args.js";
2
+ import type { HostResult } from "./compile-command.js";
3
+ export declare function runInit(args: InitArgs, rootDir: string): HostResult;
4
+ //# sourceMappingURL=init-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../src/init-command.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAOvD,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CA2CnE"}
@@ -0,0 +1,121 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { dirname, join, relative } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { BomBuilder } from "@blockml/builder";
6
+ import { initProject } from "@blockml/cli";
7
+ import { parse } from "@blockml/parser";
8
+ import { serialize } from "@blockml/serializer";
9
+ const CLI_PACKAGE = "@machineblocks/cli";
10
+ const MACHINEBLOCKS_LIBRARY = "com.machineblocks.bml.Library";
11
+ const MACHINEBLOCKS_NAMESPACE = "com.machineblocks.bml";
12
+ const BLOCK_LIBRARY_BASE = "org.blockml.bml.core.BlockLibrary";
13
+ export function runInit(args, rootDir) {
14
+ const scaffold = initProject({
15
+ packageFqn: args.packageFqn,
16
+ rootDir,
17
+ ...(args.srcDir === undefined ? {} : { srcDir: args.srcDir }),
18
+ install: false,
19
+ });
20
+ const lines = scaffold.lines.map((line) => line.text);
21
+ if (scaffold.code !== 0) {
22
+ return { code: scaffold.code, lines };
23
+ }
24
+ const srcDir = args.srcDir?.trim() || "blocks";
25
+ const dependency = ensureCliDevDependency(rootDir);
26
+ lines.push(...dependency.lines);
27
+ if (dependency.code !== 0) {
28
+ return { code: dependency.code, lines };
29
+ }
30
+ const library = ensureLibraryDependency(rootDir, srcDir, args.packageFqn);
31
+ lines.push(...library.lines);
32
+ if (library.code !== 0) {
33
+ return { code: library.code, lines };
34
+ }
35
+ if (!args.packageFqn.split(".").includes("bml")) {
36
+ lines.push("Package FQN has no bml segment. Compile maps a bml segment to scad.");
37
+ }
38
+ if (!args.install) {
39
+ return { code: 0, lines };
40
+ }
41
+ const kept = lines.filter((line) => !line.startsWith("Next:"));
42
+ const needsAgents = lines.some((line) => line.startsWith("Next:") && line.includes("agents-md"));
43
+ const installed = npmInstall(rootDir);
44
+ if (installed.code !== 0) {
45
+ return { code: installed.code, lines: [...kept, ...installed.lines] };
46
+ }
47
+ return {
48
+ code: 0,
49
+ lines: [...kept, ...installed.lines, needsAgents ? "Next: npx blockml agents-md generate" : "Next: npx blockml validate"],
50
+ };
51
+ }
52
+ function ensureCliDevDependency(rootDir) {
53
+ const pkgPath = join(rootDir, "package.json");
54
+ let pkg;
55
+ try {
56
+ pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
57
+ }
58
+ catch {
59
+ return { code: 2, lines: ["Could not parse package.json."] };
60
+ }
61
+ if (pkg.dependencies?.[CLI_PACKAGE] !== undefined || pkg.devDependencies?.[CLI_PACKAGE] !== undefined) {
62
+ return { code: 0, lines: [`Skipped existing ${CLI_PACKAGE}`] };
63
+ }
64
+ pkg.devDependencies = { ...pkg.devDependencies, [CLI_PACKAGE]: `^${ownVersion()}` };
65
+ writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`, "utf8");
66
+ return { code: 0, lines: [`Recorded devDependency ${CLI_PACKAGE}`] };
67
+ }
68
+ function ensureLibraryDependency(rootDir, srcDir, packageFqn) {
69
+ const libraryPath = join(rootDir, srcDir, ...packageFqn.split("."), "Library.bml");
70
+ const display = displayPath(libraryPath, rootDir);
71
+ if (!existsSync(libraryPath)) {
72
+ return { code: 1, lines: [`Library not found: ${display}`] };
73
+ }
74
+ const parsed = parse(readFileSync(libraryPath, "utf8"), { filePath: libraryPath });
75
+ if (!parsed.success || parsed.document === null) {
76
+ return { code: 1, lines: [`Failed to parse ${display}`] };
77
+ }
78
+ if (dependsOn(parsed.document.block, MACHINEBLOCKS_LIBRARY)) {
79
+ return { code: 0, lines: [`Skipped existing ${MACHINEBLOCKS_LIBRARY}`] };
80
+ }
81
+ const builder = BomBuilder.edit(parsed.document);
82
+ if (!dependenciesAggregation(parsed.document.block)) {
83
+ builder.addAggregation({ name: "dependencies", typeFqn: BLOCK_LIBRARY_BASE, override: true });
84
+ }
85
+ builder.ensureNamespaceBinding("mb", MACHINEBLOCKS_NAMESPACE);
86
+ builder.addCompositionChild("dependencies", MACHINEBLOCKS_LIBRARY);
87
+ const emitted = serialize(builder.seal());
88
+ if (!emitted.success || emitted.text === null) {
89
+ return { code: 1, lines: [`Failed to serialize ${display}`] };
90
+ }
91
+ writeFileSync(libraryPath, emitted.text, "utf8");
92
+ return { code: 0, lines: [`Updated ${display}`] };
93
+ }
94
+ function dependsOn(block, typeFqn) {
95
+ const aggregation = dependenciesAggregation(block);
96
+ if (!aggregation?.composition) {
97
+ return false;
98
+ }
99
+ return aggregation.composition.children.some((child) => child.kind === "blockInstance" && child.instance.typeFqn === typeFqn);
100
+ }
101
+ function dependenciesAggregation(block) {
102
+ const member = block.members.find((entry) => entry.kind === "aggregation" && entry.name === "dependencies");
103
+ return member?.kind === "aggregation" ? member : undefined;
104
+ }
105
+ function npmInstall(rootDir) {
106
+ const result = spawnSync("npm", ["install"], { cwd: rootDir, stdio: "inherit" });
107
+ if (result.status !== 0) {
108
+ return { code: 1, lines: ["npm install failed."] };
109
+ }
110
+ return { code: 0, lines: [] };
111
+ }
112
+ function ownVersion() {
113
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
114
+ const pkg = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf8"));
115
+ return pkg.version ?? "0.0.0";
116
+ }
117
+ function displayPath(file, rootDir) {
118
+ const rel = relative(rootDir, file);
119
+ return rel && !rel.startsWith("..") ? rel : file;
120
+ }
121
+ //# sourceMappingURL=init-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../src/init-command.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@machineblocks/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "MachineBlocks host CLI — simplified BlockML entry that renders BML to SCAD",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {
@@ -30,13 +30,16 @@
30
30
  "test": "vitest run --root ../.. packages/machineblocks-cli/test"
31
31
  },
32
32
  "dependencies": {
33
- "@blockml/block-render-engine": "^0.1.0",
34
- "@blockml/cli": "^0.9.13",
35
- "@blockml/compiler": "^0.9.13",
36
- "@blockml/core": "^1.4.2",
37
- "@blockml/framework": "^0.9.13",
33
+ "@blockml/block-render-engine": "^0.1.1",
34
+ "@blockml/builder": "^0.9.14",
35
+ "@blockml/cli": "^0.9.14",
36
+ "@blockml/compiler": "^0.9.14",
37
+ "@blockml/core": "^1.4.5",
38
+ "@blockml/framework": "^0.9.14",
39
+ "@blockml/parser": "^0.9.14",
40
+ "@blockml/serializer": "^0.9.14",
38
41
  "@machineblocks/core": "^3.0.0-A4",
39
- "@machineblocks/render-target": "^0.1.0"
42
+ "@machineblocks/render-target": "^0.1.1"
40
43
  },
41
44
  "engines": {
42
45
  "node": ">=20"