@nwire/cli 0.7.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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -0
  3. package/dist/__tests__/doctor.test.d.ts +10 -0
  4. package/dist/__tests__/doctor.test.d.ts.map +1 -0
  5. package/dist/__tests__/doctor.test.js +105 -0
  6. package/dist/__tests__/doctor.test.js.map +1 -0
  7. package/dist/cache-runner.d.ts +2 -0
  8. package/dist/cache-runner.d.ts.map +1 -0
  9. package/dist/cache-runner.js +58 -0
  10. package/dist/cache-runner.js.map +1 -0
  11. package/dist/cli.d.ts +16 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +67 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commands/build.d.ts +13 -0
  16. package/dist/commands/build.d.ts.map +1 -0
  17. package/dist/commands/build.js +74 -0
  18. package/dist/commands/build.js.map +1 -0
  19. package/dist/commands/cache.d.ts +6 -0
  20. package/dist/commands/cache.d.ts.map +1 -0
  21. package/dist/commands/cache.js +27 -0
  22. package/dist/commands/cache.js.map +1 -0
  23. package/dist/commands/check.d.ts +6 -0
  24. package/dist/commands/check.d.ts.map +1 -0
  25. package/dist/commands/check.js +21 -0
  26. package/dist/commands/check.js.map +1 -0
  27. package/dist/commands/dev.d.ts +11 -0
  28. package/dist/commands/dev.d.ts.map +1 -0
  29. package/dist/commands/dev.js +165 -0
  30. package/dist/commands/dev.js.map +1 -0
  31. package/dist/commands/doctor.d.ts +59 -0
  32. package/dist/commands/doctor.d.ts.map +1 -0
  33. package/dist/commands/doctor.js +399 -0
  34. package/dist/commands/doctor.js.map +1 -0
  35. package/dist/commands/fmt.d.ts +13 -0
  36. package/dist/commands/fmt.d.ts.map +1 -0
  37. package/dist/commands/fmt.js +33 -0
  38. package/dist/commands/fmt.js.map +1 -0
  39. package/dist/commands/greeting.d.ts +6 -0
  40. package/dist/commands/greeting.d.ts.map +1 -0
  41. package/dist/commands/greeting.js +25 -0
  42. package/dist/commands/greeting.js.map +1 -0
  43. package/dist/commands/infra.d.ts +14 -0
  44. package/dist/commands/infra.d.ts.map +1 -0
  45. package/dist/commands/infra.js +146 -0
  46. package/dist/commands/infra.js.map +1 -0
  47. package/dist/commands/lint.d.ts +12 -0
  48. package/dist/commands/lint.d.ts.map +1 -0
  49. package/dist/commands/lint.js +32 -0
  50. package/dist/commands/lint.js.map +1 -0
  51. package/dist/commands/logs.d.ts +21 -0
  52. package/dist/commands/logs.d.ts.map +1 -0
  53. package/dist/commands/logs.js +73 -0
  54. package/dist/commands/logs.js.map +1 -0
  55. package/dist/commands/ls.d.ts +5 -0
  56. package/dist/commands/ls.d.ts.map +1 -0
  57. package/dist/commands/ls.js +26 -0
  58. package/dist/commands/ls.js.map +1 -0
  59. package/dist/commands/please.d.ts +13 -0
  60. package/dist/commands/please.d.ts.map +1 -0
  61. package/dist/commands/please.js +46 -0
  62. package/dist/commands/please.js.map +1 -0
  63. package/dist/commands/ps.d.ts +6 -0
  64. package/dist/commands/ps.d.ts.map +1 -0
  65. package/dist/commands/ps.js +21 -0
  66. package/dist/commands/ps.js.map +1 -0
  67. package/dist/commands/run.d.ts +19 -0
  68. package/dist/commands/run.d.ts.map +1 -0
  69. package/dist/commands/run.js +112 -0
  70. package/dist/commands/run.js.map +1 -0
  71. package/dist/commands/studio.d.ts +9 -0
  72. package/dist/commands/studio.d.ts.map +1 -0
  73. package/dist/commands/studio.js +46 -0
  74. package/dist/commands/studio.js.map +1 -0
  75. package/dist/commands/test.d.ts +26 -0
  76. package/dist/commands/test.d.ts.map +1 -0
  77. package/dist/commands/test.js +143 -0
  78. package/dist/commands/test.js.map +1 -0
  79. package/dist/index.d.ts +11 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +11 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/kernel-instance.d.ts +8 -0
  84. package/dist/kernel-instance.d.ts.map +1 -0
  85. package/dist/kernel-instance.js +13 -0
  86. package/dist/kernel-instance.js.map +1 -0
  87. package/dist/lib/colors.d.ts +19 -0
  88. package/dist/lib/colors.d.ts.map +1 -0
  89. package/dist/lib/colors.js +18 -0
  90. package/dist/lib/colors.js.map +1 -0
  91. package/dist/lib/exec.d.ts +30 -0
  92. package/dist/lib/exec.d.ts.map +1 -0
  93. package/dist/lib/exec.js +58 -0
  94. package/dist/lib/exec.js.map +1 -0
  95. package/dist/lib/process-state.d.ts +30 -0
  96. package/dist/lib/process-state.d.ts.map +1 -0
  97. package/dist/lib/process-state.js +68 -0
  98. package/dist/lib/process-state.js.map +1 -0
  99. package/dist/lib/project.d.ts +15 -0
  100. package/dist/lib/project.d.ts.map +1 -0
  101. package/dist/lib/project.js +52 -0
  102. package/dist/lib/project.js.map +1 -0
  103. package/dist/lib/run-task.d.ts +32 -0
  104. package/dist/lib/run-task.d.ts.map +1 -0
  105. package/dist/lib/run-task.js +70 -0
  106. package/dist/lib/run-task.js.map +1 -0
  107. package/dist/lib/vite-node.d.ts +10 -0
  108. package/dist/lib/vite-node.d.ts.map +1 -0
  109. package/dist/lib/vite-node.js +14 -0
  110. package/dist/lib/vite-node.js.map +1 -0
  111. package/dist/load-config.d.ts +27 -0
  112. package/dist/load-config.d.ts.map +1 -0
  113. package/dist/load-config.js +38 -0
  114. package/dist/load-config.js.map +1 -0
  115. package/dist/ls-runner.d.ts +2 -0
  116. package/dist/ls-runner.d.ts.map +1 -0
  117. package/dist/ls-runner.js +55 -0
  118. package/dist/ls-runner.js.map +1 -0
  119. package/dist/ui/dev-dashboard.d.ts +23 -0
  120. package/dist/ui/dev-dashboard.d.ts.map +1 -0
  121. package/dist/ui/dev-dashboard.js +53 -0
  122. package/dist/ui/dev-dashboard.js.map +1 -0
  123. package/dist/ui/greeting.d.ts +16 -0
  124. package/dist/ui/greeting.d.ts.map +1 -0
  125. package/dist/ui/greeting.js +16 -0
  126. package/dist/ui/greeting.js.map +1 -0
  127. package/dist/ui/process-table.d.ts +13 -0
  128. package/dist/ui/process-table.d.ts.map +1 -0
  129. package/dist/ui/process-table.js +26 -0
  130. package/dist/ui/process-table.js.map +1 -0
  131. package/package.json +49 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Alex Gefter / 200apps Ltd.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # @nwire/cli
2
+
3
+ > The `nwire` umbrella CLI — `dev`, `run`, `cache`, `studio`, `call`, `please`, `ls`, `infra`, …
4
+
5
+ ## What it does
6
+
7
+ Built on citty: one root command per file under `commands/`. Long-lived processes (`dev`, `run`, `studio`) go through `@nwire/kernel`; build/quality passthroughs (`fmt`, `lint`, `check`) shell out. Reads `nwire.config.ts` (or falls back to convention) to locate the consumer's apps registry and `.nwire/` cache.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ pnpm add -D @nwire/cli
13
+ ```
14
+
15
+ After install the `nwire` binary is on your `node_modules/.bin`. With `pnpm dlx` (or aliased globally) you can run anywhere.
16
+
17
+ ## Quick start
18
+
19
+ ```bash
20
+ nwire dev # boot every app in the registry, hot-reload
21
+ nwire run learnflow-api # boot one wire
22
+ nwire cache # rebuild.nwire/*.json from source
23
+ nwire studio # open Studio against the cache + live runtime
24
+ nwire please <action> # dispatch an action from the command line
25
+ nwire ls # list actions / events / actors per app
26
+ nwire infra up # docker-compose up (postgres/redis/mongo/mailhog/logto/minio)
27
+ ```
28
+
29
+ ## API surface
30
+
31
+ - `nwire` CLI binary (one subcommand per file).
32
+ - `loadConfig(cwd)` / `resolveAppsEntry(cwd, config)` — programmatic entry resolution.
33
+
34
+ ## When to use
35
+
36
+ Every Nwire project after `pnpm install`. Fits every level.
37
+
38
+ ## Used only within nwire-app
39
+
40
+ This package is part of the Nwire stack — it only makes sense inside a Nwire application built with `@nwire/app` + `@nwire/forge`. If you're looking for a standalone primitive, see:
41
+
42
+ - [`@nwire/handler`](../nwire-handler/README.md) — the operation primitive (transport-agnostic)
43
+ - [`@nwire/hooks`](../nwire-hooks/README.md) — universal dispatch (chain + listeners)
44
+ - [`@nwire/http`](../nwire-http/README.md) — typed HTTP without forge
45
+ - [`@nwire/endpoint`](../nwire-endpoint/README.md) — graceful shutdown for any host
46
+
47
+ ## See also
48
+
49
+ - [Architecture sketch §05 — Tooling](../../architecture-sketch.html#packages)
50
+ - Sibling packages: [@nwire/kernel](../nwire-kernel), [@nwire/scan](../nwire-scan), [@nwire/studio](../nwire-studio), [@nwire/please](../nwire-please), [@nwire/mcp](../nwire-mcp)
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `nwire doctor` — checks run cleanly against fixture directories.
3
+ *
4
+ * Each test builds a tmpdir with the right shape (empty / L4-with-inspect /
5
+ * L4-without-inspect / docker-compose-collision) and asserts the relevant
6
+ * check produces the expected status. Live port probes are exercised
7
+ * against ephemeral bindings.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=doctor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/doctor.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * `nwire doctor` — checks run cleanly against fixture directories.
3
+ *
4
+ * Each test builds a tmpdir with the right shape (empty / L4-with-inspect /
5
+ * L4-without-inspect / docker-compose-collision) and asserts the relevant
6
+ * check produces the expected status. Live port probes are exercised
7
+ * against ephemeral bindings.
8
+ */
9
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
10
+ import { tmpdir } from "node:os";
11
+ import { join } from "node:path";
12
+ import { createServer } from "node:net";
13
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
14
+ import { runDoctor } from "../commands/doctor.js";
15
+ let target;
16
+ beforeEach(() => {
17
+ target = mkdtempSync(join(tmpdir(), "doctor-test-"));
18
+ });
19
+ afterEach(() => {
20
+ if (target)
21
+ rmSync(target, { recursive: true, force: true });
22
+ });
23
+ function pickCheck(results, name) {
24
+ const hit = results.find((r) => r.check.name === name);
25
+ if (!hit)
26
+ throw new Error(`expected check "${name}" in results`);
27
+ return hit.result;
28
+ }
29
+ describe("nwire doctor — workspace shape detection", () => {
30
+ it("workspace fails on a totally empty dir", async () => {
31
+ const results = await runDoctor({ cwd: target });
32
+ expect(pickCheck(results, "workspace").status).toBe("fail");
33
+ });
34
+ it("workspace warns when package.json exists but no apps/src/nwire.config", async () => {
35
+ writeFileSync(join(target, "package.json"), JSON.stringify({ name: "x" }));
36
+ const results = await runDoctor({ cwd: target });
37
+ expect(pickCheck(results, "workspace").status).toBe("warn");
38
+ });
39
+ it("workspace passes when apps/ is present", async () => {
40
+ writeFileSync(join(target, "package.json"), JSON.stringify({ name: "x" }));
41
+ mkdirSync(join(target, "apps"));
42
+ const results = await runDoctor({ cwd: target });
43
+ expect(pickCheck(results, "workspace").status).toBe("pass");
44
+ });
45
+ });
46
+ describe("nwire doctor — inspect-mount audit", () => {
47
+ it("warns when an L4-shaped main.ts is missing api.inspect(app)", async () => {
48
+ writeFileSync(join(target, "package.json"), "{}");
49
+ mkdirSync(join(target, "apps", "svc"), { recursive: true });
50
+ writeFileSync(join(target, "apps", "svc", "main.ts"), `import { createApp } from "@nwire/forge";\n` +
51
+ `const app = createApp({ modules: [] });\n` +
52
+ `await app.start();\n`);
53
+ const results = await runDoctor({ cwd: target, filter: "inspect-mount" });
54
+ const r = pickCheck(results, "inspect-mount");
55
+ expect(r.status).toBe("warn");
56
+ expect(r.hint).toContain("apps/svc/main.ts");
57
+ });
58
+ it("passes when L4 main.ts calls .inspect(app)", async () => {
59
+ writeFileSync(join(target, "package.json"), "{}");
60
+ mkdirSync(join(target, "apps", "svc"), { recursive: true });
61
+ writeFileSync(join(target, "apps", "svc", "main.ts"), `import { createApp } from "@nwire/forge";\n` +
62
+ `const app = createApp({ modules: [] });\n` +
63
+ `await app.start();\n` +
64
+ `api.inspect(app);\n`);
65
+ const results = await runDoctor({ cwd: target, filter: "inspect-mount" });
66
+ expect(pickCheck(results, "inspect-mount").status).toBe("pass");
67
+ });
68
+ });
69
+ describe("nwire doctor — port collision detection", () => {
70
+ it("warns when probe port 9_400 is taken", async () => {
71
+ const srv = createServer();
72
+ await new Promise((res) => srv.listen(9_400, "127.0.0.1", res));
73
+ try {
74
+ const results = await runDoctor({ cwd: target, filter: "probe-port" });
75
+ expect(pickCheck(results, "probe-port").status).toBe("warn");
76
+ }
77
+ finally {
78
+ await new Promise((res) => srv.close(() => res()));
79
+ }
80
+ });
81
+ it("compose-port-collisions fails when docker-compose maps :9400", async () => {
82
+ writeFileSync(join(target, "package.json"), "{}");
83
+ writeFileSync(join(target, "docker-compose.yml"), `services:\n badservice:\n image: foo\n ports:\n - "9400:9400"\n`);
84
+ const results = await runDoctor({ cwd: target, filter: "compose" });
85
+ const r = pickCheck(results, "compose-port-collisions");
86
+ expect(r.status).toBe("fail");
87
+ expect(r.message).toContain("9400");
88
+ });
89
+ it("compose check passes with no compose file", async () => {
90
+ const results = await runDoctor({ cwd: target, filter: "compose" });
91
+ expect(pickCheck(results, "compose-port-collisions").status).toBe("info");
92
+ });
93
+ });
94
+ describe("nwire doctor — filter", () => {
95
+ it("returns only matching checks", async () => {
96
+ const results = await runDoctor({ cwd: target, filter: "node-version" });
97
+ expect(results.length).toBe(1);
98
+ expect(results[0].check.name).toBe("node-version");
99
+ });
100
+ it("returns empty array when nothing matches", async () => {
101
+ const results = await runDoctor({ cwd: target, filter: "zzzzzz" });
102
+ expect(results.length).toBe(0);
103
+ });
104
+ });
105
+ //# sourceMappingURL=doctor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.test.js","sourceRoot":"","sources":["../../src/__tests__/doctor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cache-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-runner.d.ts","sourceRoot":"","sources":["../src/cache-runner.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ // Cache runner — invoked by `nwire cache`. Imports the consumer's apps
2
+ // registry (resolved via nwire.config.ts or fallback paths), builds the
3
+ // cache, writes .nwire/.
4
+ import { resolve } from "node:path";
5
+ import { buildCache, writeCache } from "@nwire/scan";
6
+ import { loadConfig, resolveAppsEntry } from "./load-config.js";
7
+ async function main() {
8
+ const cwd = process.cwd();
9
+ const config = await loadConfig(cwd);
10
+ const appsPath = resolveAppsEntry(cwd, config);
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ const mod = await import(/* @vite-ignore */ appsPath);
13
+ // Resolve apps registry in this order:
14
+ // 1. named export `allApps: AppDefinition[]`
15
+ // 2. named export `apps: AppDefinition[]`
16
+ // 3. default export — either AppDefinition[] or a single AppDefinition
17
+ // 4. named export `app: AppDefinition`
18
+ // 5. any single exported AppDefinition the module declares
19
+ let apps = [];
20
+ if (Array.isArray(mod.allApps))
21
+ apps = mod.allApps;
22
+ else if (Array.isArray(mod.apps))
23
+ apps = mod.apps;
24
+ else if (Array.isArray(mod.default))
25
+ apps = mod.default;
26
+ else if (isAppDef(mod.default))
27
+ apps = [mod.default];
28
+ else if (isAppDef(mod.app))
29
+ apps = [mod.app];
30
+ else {
31
+ // Sweep all named exports for AppDefinitions.
32
+ apps = Object.values(mod).filter(isAppDef);
33
+ }
34
+ if (apps.length === 0) {
35
+ console.error(`nwire cache: no apps found in ${appsPath}.\n` +
36
+ `Expected: exported \`apps\`, \`allApps\`, or default-exported AppDefinition.\n` +
37
+ `Optional: nwire.config.ts with { appsEntry: "..." } to point at a custom location.`);
38
+ process.exit(1);
39
+ }
40
+ // Route bindings are declared at the app layer via `httpInterface().wire()`
41
+ // and surface in Studio through the running wire's `/_nwire/*` introspection
42
+ // mount, not through the cache. The scan is module-domain-only.
43
+ const cache = buildCache(apps);
44
+ const outDir = resolve(cwd, config.cacheDir ?? ".nwire");
45
+ await writeCache(cache, outDir);
46
+ // eslint-disable-next-line no-console
47
+ console.log(`nwire cache: wrote ${cache.apps.length} apps, ${cache.modules.length} modules, ` +
48
+ `${cache.actions.length} actions, ${cache.events.length} events, ` +
49
+ `${cache.resolvers.length} resolvers to ${outDir}/`);
50
+ }
51
+ function isAppDef(x) {
52
+ return (typeof x === "object" && x !== null && x.$kind === "app-definition");
53
+ }
54
+ main().catch((err) => {
55
+ console.error(err);
56
+ process.exit(1);
57
+ });
58
+ //# sourceMappingURL=cache-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-runner.js","sourceRoot":"","sources":["../src/cache-runner.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `nwire` — the umbrella CLI. Built on citty: one root command, one
4
+ * subcommand per file under `commands/`. The CLI is intentionally thin —
5
+ * every command delegates to either the kernel (long-lived processes,
6
+ * future cross-surface dispatch) or a small set of execution helpers
7
+ * (`viteNode`, `spawnInteractive`).
8
+ *
9
+ * Adding a new command:
10
+ * 1. write packages/nwire-cli/src/commands/<name>.ts using `defineCommand`
11
+ * 2. import + register it below
12
+ * 3. (later) when it should be reachable from Studio/MCP, also
13
+ * `kernel.router.register("<name>", handler)` in kernel-instance.ts
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}
package/dist/cli.js ADDED
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `nwire` — the umbrella CLI. Built on citty: one root command, one
4
+ * subcommand per file under `commands/`. The CLI is intentionally thin —
5
+ * every command delegates to either the kernel (long-lived processes,
6
+ * future cross-surface dispatch) or a small set of execution helpers
7
+ * (`viteNode`, `spawnInteractive`).
8
+ *
9
+ * Adding a new command:
10
+ * 1. write packages/nwire-cli/src/commands/<name>.ts using `defineCommand`
11
+ * 2. import + register it below
12
+ * 3. (later) when it should be reachable from Studio/MCP, also
13
+ * `kernel.router.register("<name>", handler)` in kernel-instance.ts
14
+ */
15
+ import { defineCommand, runMain } from "citty";
16
+ import { buildCommand } from "./commands/build.js";
17
+ import { cacheCommand } from "./commands/cache.js";
18
+ import { checkCommand } from "./commands/check.js";
19
+ import { devCommand } from "./commands/dev.js";
20
+ import { doctorCommand } from "./commands/doctor.js";
21
+ import { fmtCommand } from "./commands/fmt.js";
22
+ import { greetingCommand } from "./commands/greeting.js";
23
+ import { infraCommand } from "./commands/infra.js";
24
+ import { lintCommand } from "./commands/lint.js";
25
+ import { logsCommand } from "./commands/logs.js";
26
+ import { lsCommand } from "./commands/ls.js";
27
+ import { pleaseCommand } from "./commands/please.js";
28
+ import { psCommand } from "./commands/ps.js";
29
+ import { runCommand } from "./commands/run.js";
30
+ import { studioCommand } from "./commands/studio.js";
31
+ import { testCommand } from "./commands/test.js";
32
+ const main = defineCommand({
33
+ meta: {
34
+ name: "nwire",
35
+ version: "0.1.0",
36
+ description: "Nwire — event-driven framework. Dev, build, please, ps, logs, studio, …",
37
+ },
38
+ subCommands: {
39
+ build: buildCommand,
40
+ cache: cacheCommand,
41
+ check: checkCommand,
42
+ dev: devCommand,
43
+ doctor: doctorCommand,
44
+ fmt: fmtCommand,
45
+ infra: infraCommand,
46
+ lint: lintCommand,
47
+ logs: logsCommand,
48
+ ls: lsCommand,
49
+ please: pleaseCommand,
50
+ ps: psCommand,
51
+ run: runCommand,
52
+ studio: studioCommand,
53
+ test: testCommand,
54
+ },
55
+ });
56
+ // Citty's parent-`run` fires alongside subcommand handlers, which would
57
+ // print the greeting after every command. We instead detect the no-arg
58
+ // case explicitly here and route to the greeting command. Anything else
59
+ // hands off to citty as normal.
60
+ const userArgs = process.argv.slice(2);
61
+ if (userArgs.length === 0) {
62
+ void greetingCommand.run({});
63
+ }
64
+ else {
65
+ void runMain(main);
66
+ }
67
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,yEAAyE;KACvF;IACD,WAAW,EAAE;QACX,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,aAAa;QACrB,EAAE,EAAE,SAAS;QACb,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,WAAW;KAClB;CACF,CAAC,CAAC;AAEH,wEAAwE;AACxE,uEAAuE;AACvE,wEAAwE;AACxE,gCAAgC;AAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC1B,KAAK,eAAe,CAAC,GAAI,CAAC,EAAW,CAAC,CAAC;AACzC,CAAC;KAAM,CAAC;IACN,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `nwire build [wire?]` — produce a deployable bundle for one or every
3
+ * wire. Backend Nwire wires run as Node scripts; `vite build --ssr`
4
+ * produces a single-file output under `dist/<wire>/`.
5
+ */
6
+ export declare const buildCommand: import("citty").CommandDef<{
7
+ wire: {
8
+ type: "positional";
9
+ required: false;
10
+ description: string;
11
+ };
12
+ }>;
13
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,eAAO,MAAM,YAAY;;;;;;EAyDvB,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * `nwire build [wire?]` — produce a deployable bundle for one or every
3
+ * wire. Backend Nwire wires run as Node scripts; `vite build --ssr`
4
+ * produces a single-file output under `dist/<wire>/`.
5
+ */
6
+ import { defineCommand } from "citty";
7
+ import { resolve } from "node:path";
8
+ import { existsSync } from "node:fs";
9
+ import { palette } from "../lib/colors.js";
10
+ import { detectProject } from "../lib/project.js";
11
+ import { runTaskList } from "../lib/run-task.js";
12
+ function resolveEntry(cwd, wireName) {
13
+ const appDir = resolve(cwd, "apps", wireName);
14
+ for (const candidate of [resolve(appDir, "run.ts"), resolve(appDir, "main.ts")]) {
15
+ if (existsSync(candidate))
16
+ return candidate;
17
+ }
18
+ return undefined;
19
+ }
20
+ export const buildCommand = defineCommand({
21
+ meta: {
22
+ name: "build",
23
+ description: "Build deployable bundles for one or every wire",
24
+ },
25
+ args: {
26
+ wire: {
27
+ type: "positional",
28
+ required: false,
29
+ description: "Wire name; omit to build all detected wires",
30
+ },
31
+ },
32
+ async run({ args }) {
33
+ const cwd = process.cwd();
34
+ const project = detectProject(cwd);
35
+ const wires = args.wire ? [String(args.wire)] : [...project.wires];
36
+ if (wires.length === 0) {
37
+ // eslint-disable-next-line no-console
38
+ console.error(palette.err("nwire build:") + " no wires detected (expected apps/<name>/{run,main}.ts)");
39
+ process.exit(1);
40
+ }
41
+ const tasks = wires.flatMap((wire) => {
42
+ const entry = resolveEntry(cwd, wire);
43
+ if (!entry) {
44
+ return [
45
+ {
46
+ title: `${wire} — entry missing`,
47
+ command: "false",
48
+ args: [],
49
+ skipOnFail: true,
50
+ },
51
+ ];
52
+ }
53
+ const outDir = resolve(cwd, "dist", wire);
54
+ return [
55
+ {
56
+ title: `${wire} (${entry.replace(cwd + "/", "")} → dist/${wire})`,
57
+ command: "pnpm",
58
+ args: [
59
+ "exec",
60
+ "vite",
61
+ "build",
62
+ "--ssr",
63
+ entry,
64
+ "--outDir",
65
+ outDir,
66
+ "--emptyOutDir",
67
+ ],
68
+ },
69
+ ];
70
+ });
71
+ process.exit(await runTaskList(tasks));
72
+ },
73
+ });
74
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,SAAS,YAAY,CAAC,GAAW,EAAE,QAAgB;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAChF,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,gDAAgD;KAC9D;IACD,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,6CAA6C;SAC3D;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,sCAAsC;YACtC,OAAO,CAAC,KAAK,CACX,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,yDAAyD,CACxF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;oBACL;wBACE,KAAK,EAAE,GAAG,IAAI,kBAAkB;wBAChC,OAAO,EAAE,OAAO;wBAChB,IAAI,EAAE,EAAuB;wBAC7B,UAAU,EAAE,IAAI;qBACjB;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO;gBACL;oBACE,KAAK,EAAE,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,WAAW,IAAI,GAAG;oBACjE,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE;wBACJ,MAAM;wBACN,MAAM;wBACN,OAAO;wBACP,OAAO;wBACP,KAAK;wBACL,UAAU;wBACV,MAAM;wBACN,eAAe;qBACK;iBACvB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `nwire cache` — rebuilds `.nwire/` (manifest + per-kind JSON files) by
3
+ * invoking the bundled cache-runner script under vite-node.
4
+ */
5
+ export declare const cacheCommand: import("citty").CommandDef<import("citty").ArgsDef>;
6
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,eAAO,MAAM,YAAY,qDAcvB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `nwire cache` — rebuilds `.nwire/` (manifest + per-kind JSON files) by
3
+ * invoking the bundled cache-runner script under vite-node.
4
+ */
5
+ import { defineCommand } from "citty";
6
+ import { resolve, dirname } from "node:path";
7
+ import { existsSync } from "node:fs";
8
+ import { fileURLToPath } from "node:url";
9
+ import { palette } from "../lib/colors.js";
10
+ import { viteNode } from "../lib/vite-node.js";
11
+ const here = dirname(fileURLToPath(import.meta.url));
12
+ export const cacheCommand = defineCommand({
13
+ meta: {
14
+ name: "cache",
15
+ description: "Rebuild .nwire/ cache (manifest + per-kind JSON)",
16
+ },
17
+ async run({ rawArgs }) {
18
+ const builderPath = resolve(here, "..", "cache-runner.js");
19
+ if (!existsSync(builderPath)) {
20
+ // eslint-disable-next-line no-console
21
+ console.error(palette.err("nwire cache:") + ` cache runner missing at ${builderPath}`);
22
+ process.exit(1);
23
+ }
24
+ process.exit(viteNode(builderPath, rawArgs));
25
+ },
26
+ });
27
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,kDAAkD;KAChE;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;QACnB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,4BAA4B,WAAW,EAAE,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `nwire check` — composed quality gate. Runs format-check, lint, and
3
+ * typecheck in sequence. Use before pushing or in CI.
4
+ */
5
+ export declare const checkCommand: import("citty").CommandDef<import("citty").ArgsDef>;
6
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,eAAO,MAAM,YAAY,qDAavB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `nwire check` — composed quality gate. Runs format-check, lint, and
3
+ * typecheck in sequence. Use before pushing or in CI.
4
+ */
5
+ import { defineCommand } from "citty";
6
+ import { runTaskList } from "../lib/run-task.js";
7
+ export const checkCommand = defineCommand({
8
+ meta: {
9
+ name: "check",
10
+ description: "Run format-check + lint + typecheck",
11
+ },
12
+ async run() {
13
+ const code = await runTaskList([
14
+ { title: "format (oxfmt --check)", command: "pnpm", args: ["exec", "oxfmt", "--check"] },
15
+ { title: "lint (oxlint)", command: "pnpm", args: ["exec", "oxlint"] },
16
+ { title: "typecheck (tsc)", command: "pnpm", args: ["exec", "tsc", "--noEmit"] },
17
+ ]);
18
+ process.exit(code);
19
+ },
20
+ });
21
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,qCAAqC;KACnD;IACD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,EAAE,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE;YACxF,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;YACrE,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE;SACjF,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `nwire dev` — boots the project's wire under vite-node --watch with
3
+ * stdio passthrough. Prints a branded banner before spawning so the
4
+ * user sees what's about to run + the project context; the child's
5
+ * stdout/stderr flow through unmodified afterwards.
6
+ *
7
+ * Also writes a state file under `.nwire/processes/` so `nwire ps`
8
+ * sees the dev session from any other shell.
9
+ */
10
+ export declare const devCommand: import("citty").CommandDef<import("citty").ArgsDef>;
11
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,eAAO,MAAM,UAAU,qDAuJrB,CAAC"}