@waniwani/kit 0.1.6 → 0.1.7

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 (44) hide show
  1. package/README.md +39 -39
  2. package/dist/cli/codegen.js +1105 -0
  3. package/dist/cli/codegen.js.map +1 -0
  4. package/{cli/env.mjs → dist/cli/env.js} +5 -6
  5. package/dist/cli/env.js.map +1 -0
  6. package/{cli/framework.mjs → dist/cli/framework.js} +112 -115
  7. package/dist/cli/framework.js.map +1 -0
  8. package/dist/cli/index.js +378 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/{cli/init.mjs → dist/cli/init.js} +218 -259
  11. package/dist/cli/init.js.map +1 -0
  12. package/dist/cli/log.js +156 -0
  13. package/dist/cli/log.js.map +1 -0
  14. package/dist/cli/manifest.js +57 -0
  15. package/dist/cli/manifest.js.map +1 -0
  16. package/{cli/peers.mjs → dist/cli/peers.js} +77 -88
  17. package/dist/cli/peers.js.map +1 -0
  18. package/dist/cli/scan.js +100 -0
  19. package/dist/cli/scan.js.map +1 -0
  20. package/dist/cli/template.js +173 -0
  21. package/dist/cli/template.js.map +1 -0
  22. package/dist/cli/types.js +14 -0
  23. package/dist/cli/types.js.map +1 -0
  24. package/dist/cli/validate.js +328 -0
  25. package/dist/cli/validate.js.map +1 -0
  26. package/dist/cli/vercel.js +103 -0
  27. package/dist/cli/vercel.js.map +1 -0
  28. package/dist/server.d.ts +1 -1
  29. package/dist/server.d.ts.map +1 -1
  30. package/dist/server.js +0 -1
  31. package/dist/server.js.map +1 -1
  32. package/dist/web.d.ts +8 -7
  33. package/dist/web.d.ts.map +1 -1
  34. package/dist/web.js +7 -6
  35. package/dist/web.js.map +1 -1
  36. package/package.json +13 -9
  37. package/src/server.ts +7 -9
  38. package/src/web.tsx +12 -13
  39. package/cli/codegen.mjs +0 -1267
  40. package/cli/index.mjs +0 -409
  41. package/cli/log.mjs +0 -178
  42. package/cli/scan.mjs +0 -112
  43. package/cli/template.mjs +0 -190
  44. package/cli/validate.mjs +0 -391
@@ -0,0 +1,378 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * The `waniwani` CLI.
4
+ *
5
+ * waniwani init scaffold a new app folder and install it
6
+ * waniwani check validate the app folder
7
+ * waniwani dev check, generate, run the dev server, watch for changes
8
+ * waniwani build check, generate, build for production
9
+ * waniwani start run the production build
10
+ * waniwani eject write the plumbing into the repo and hand it over
11
+ *
12
+ * Every command scans the app folder, validates it, and generates a complete
13
+ * framework project under `.waniwani/`. The app repo owns content; this CLI and
14
+ * the runtime own everything else.
15
+ */
16
+ import { spawn } from "node:child_process";
17
+ import { existsSync, watch } from "node:fs";
18
+ import { dirname, join, resolve } from "node:path";
19
+ import { existingPlumbing, generate } from "./codegen.js";
20
+ import { loadAppEnv } from "./env.js";
21
+ import { devFilter, FRAMEWORK_ENV, frameworkBin, loadBuildSteps, runBuildSteps, startFilter, } from "./framework.js";
22
+ import { init } from "./init.js";
23
+ import { banner, bold, dim, green, printReport, red, yellow } from "./log.js";
24
+ import { PACKAGE_VERSION } from "./manifest.js";
25
+ import { scanApp } from "./scan.js";
26
+ import { DEFAULT_TEMPLATE, describeTemplate, resolveTemplate } from "./template.js";
27
+ import { validateApp } from "./validate.js";
28
+ import { stageBuildOutput } from "./vercel.js";
29
+ /** The commands a human sits and watches. `check` and `eject` are often scripted. */
30
+ const BANNERED = new Set(["init", "dev", "build", "start"]);
31
+ /**
32
+ * Diagnostics about this CLI's own machinery — which template was resolved, how
33
+ * many files it copied, which dependencies were overridden, stack traces. None
34
+ * of it is actionable from an app folder, so it is off unless asked for.
35
+ */
36
+ const DEBUG = Boolean(process.env.WANIWANI_DEBUG);
37
+ /**
38
+ * Every `node_modules/.bin` from the generated project up to the filesystem
39
+ * root. The framework shells out to `vite` and `tsc` by bare name.
40
+ */
41
+ function binPath(from) {
42
+ const dirs = [];
43
+ let current = resolve(from);
44
+ while (true) {
45
+ dirs.push(join(current, "node_modules", ".bin"));
46
+ const parent = dirname(current);
47
+ if (parent === current)
48
+ break;
49
+ current = parent;
50
+ }
51
+ return [...dirs, process.env.PATH].join(":");
52
+ }
53
+ /**
54
+ * Spawn a child under this CLI's PATH and environment.
55
+ *
56
+ * `stdoutFilter`/`stderrFilter` pipe that one stream through a line rewriter
57
+ * instead of inheriting it — the mechanism that keeps the framework's own
58
+ * narration out of this CLI's output (see ./framework.js). Every unfiltered
59
+ * stream is inherited, so an app's logs and tsc's diagnostics arrive untouched.
60
+ *
61
+ * `shell` is for the framework's build steps, which name their command as one
62
+ * string rather than an argv.
63
+ */
64
+ function run(command, args, { cwd, env, shell = false, stdoutFilter, stderrFilter }) {
65
+ return new Promise((resolvePromise) => {
66
+ const child = spawn(command, args, {
67
+ cwd,
68
+ shell,
69
+ stdio: ["inherit", stdoutFilter ? "pipe" : "inherit", stderrFilter ? "pipe" : "inherit"],
70
+ env: { ...process.env, PATH: binPath(cwd), ...FRAMEWORK_ENV, ...env },
71
+ });
72
+ for (const [stream, filter] of [
73
+ [child.stdout, stdoutFilter],
74
+ [child.stderr, stderrFilter],
75
+ ]) {
76
+ if (!filter || !stream)
77
+ continue;
78
+ stream.setEncoding("utf8");
79
+ stream.on("data", filter.write);
80
+ // Registered before the resolving listener, so a held partial line is
81
+ // emitted before the command reports its exit code.
82
+ child.on("close", filter.flush);
83
+ }
84
+ child.on("close", (code) => resolvePromise(code ?? 1));
85
+ child.on("error", (error) => {
86
+ console.error(red(`failed to run ${command}: ${error.message}`));
87
+ resolvePromise(1);
88
+ });
89
+ });
90
+ }
91
+ /** The template source, most specific wins. */
92
+ function templateSource(flags) {
93
+ return flags.template ?? process.env.WANIWANI_TEMPLATE ?? DEFAULT_TEMPLATE;
94
+ }
95
+ /**
96
+ * Report what the runtime changed about the template's package.json. This is
97
+ * the fleet-wide fix mechanism made visible: every line is a decision taken
98
+ * once here instead of in 30 repos.
99
+ *
100
+ * Every line is about the plumbing rather than the app, so `dev` and `build`
101
+ * print it only under WANIWANI_DEBUG. `eject` prints it unconditionally —
102
+ * there the plumbing becomes the app's to maintain.
103
+ */
104
+ function printOverrides(overrides) {
105
+ if (overrides.length === 0)
106
+ return;
107
+ console.log(`\n${dim("runtime overrides on top of the template")}`);
108
+ for (const { name, from, to, why, conflict, removed } of overrides) {
109
+ const marker = conflict ? yellow("!") : dim("·");
110
+ const change = removed ? "removed" : from ? `${from} → ${to}` : `+ ${to}`;
111
+ console.log(` ${marker} ${name} ${dim(change)}`);
112
+ console.log(` ${dim(why)}`);
113
+ }
114
+ }
115
+ async function prepare(appRoot, flags, { quiet = false } = {}) {
116
+ const app = scanApp(appRoot);
117
+ const report = await validateApp(app);
118
+ if (!quiet) {
119
+ printReport(app, report);
120
+ }
121
+ if (!report.ok) {
122
+ return null;
123
+ }
124
+ // Where the plumbing came from, how much of it there was, and which
125
+ // dependencies the runtime overrode are all facts about our own machinery.
126
+ // An app author can act on none of them, so they are diagnostics: on under
127
+ // WANIWANI_DEBUG, off otherwise. A stale or unreachable template is different
128
+ // — that one changes what they are running, so it always shows.
129
+ const template = await resolveTemplate(templateSource(flags));
130
+ if (!quiet && DEBUG) {
131
+ console.log(`\n${dim("template")} ${describeTemplate(template)}`);
132
+ }
133
+ if (!quiet && template.offline) {
134
+ console.log(`${yellow("!")} ${dim("GitHub unreachable — using the cached template")}`);
135
+ }
136
+ const { outDir, overrides, fromTemplate, manifest } = generate(app, { template });
137
+ if (!quiet && DEBUG) {
138
+ console.log(`${dim(`${fromTemplate.length} files copied`)} ${dim(manifest
139
+ ? "· exclusions from the template's manifest"
140
+ : "· exclusions from the built-in defaults")}`);
141
+ printOverrides(overrides);
142
+ }
143
+ return { app, outDir, template };
144
+ }
145
+ /**
146
+ * Build the generated project for production: compile the server, bundle the
147
+ * views, and emit a Vercel Build Output tree.
148
+ *
149
+ * The framework's own `build` command renders exactly these steps inside a
150
+ * branded UI, so the steps are driven here and reported in this CLI's format.
151
+ * When the step list can't be loaded, shelling out is the fallback: the build
152
+ * still runs, it just narrates itself.
153
+ *
154
+ * The tree is emitted inside the generated project and staged at the app root
155
+ * afterwards, which is where Vercel reads one. See ./vercel.js for why that
156
+ * move is what lets an app repo carry no deploy config.
157
+ */
158
+ async function build(outDir, appRoot) {
159
+ const steps = await loadBuildSteps(outDir);
160
+ if (!steps) {
161
+ const code = await run("node", [frameworkBin(), "build"], { cwd: outDir });
162
+ if (code === 0)
163
+ stageBuildOutput(outDir, appRoot);
164
+ return code;
165
+ }
166
+ console.log(`\n${dim("building for production")}`);
167
+ const code = await runBuildSteps(steps, {
168
+ root: outDir,
169
+ // The steps name their command as one string (`tsc -b --force`), and reach
170
+ // for `tsc` and `vite` by bare name.
171
+ runShell: (command) => run(command, [], { cwd: outDir, shell: true }),
172
+ });
173
+ if (code !== 0)
174
+ return code;
175
+ const staged = stageBuildOutput(outDir, appRoot);
176
+ if (staged) {
177
+ console.log(` ${green("✓")} ${dim("Staging Vercel build output")}`);
178
+ }
179
+ return 0;
180
+ }
181
+ /**
182
+ * Write the plumbing into the app repo and step out of the way. What comes out
183
+ * is an ordinary project on the underlying framework, driven by its own CLI: a
184
+ * Dockerfile, a vercel.json, and the runtime vendored as readable source. No
185
+ * dependency on this CLI or on Waniwani remains.
186
+ */
187
+ async function eject(appRoot, flags) {
188
+ const app = scanApp(appRoot);
189
+ const report = await validateApp(app);
190
+ printReport(app, report);
191
+ if (!report.ok)
192
+ return 1;
193
+ const outDir = flags.out ? resolve(flags.out) : appRoot;
194
+ const inPlace = outDir === appRoot;
195
+ // Which files count as plumbing depends on what the template ships, so the
196
+ // template has to be resolved before the question can be asked.
197
+ const template = await resolveTemplate(templateSource(flags));
198
+ console.log(`\n${dim("template")} ${describeTemplate(template)}`);
199
+ const clashes = existingPlumbing(outDir, template);
200
+ if (clashes.length > 0 && !flags.force) {
201
+ console.error(`\n${red("✗")} ${bold("would overwrite existing files")}\n`);
202
+ for (const file of clashes) {
203
+ console.error(` ${file}`);
204
+ }
205
+ console.error(`\n${dim("pass --force to overwrite, or --out <dir> to write elsewhere")}`);
206
+ return 1;
207
+ }
208
+ const { written, overrides, fromTemplate, moved } = generate(app, {
209
+ template,
210
+ layout: "eject",
211
+ outDir,
212
+ });
213
+ console.log(`\n${green("✓")} ${bold("Ejected")} ${dim(`→ ${outDir}`)}\n`);
214
+ for (const file of written) {
215
+ console.log(` ${file}`);
216
+ }
217
+ console.log(` ${dim(`+ ${fromTemplate.length} files from the template`)}`);
218
+ printOverrides(overrides);
219
+ console.log(`\n${bold("What changed")}`);
220
+ if (moved.length > 0) {
221
+ console.log(` ${dim("·")} your source ${bold("moved")} under ${bold("src/app/")}: ${moved.join(", ")}`);
222
+ console.log(` ${dim("the framework compiles from src/ — nothing outside it can be an input")}`);
223
+ }
224
+ console.log(` ${dim("·")} the runtime is now yours, vendored as source in ${bold("src/_runtime/")}`);
225
+ console.log(` ${dim("·")} @waniwani/kit imports point at src/_runtime/ — drop the dependency`);
226
+ console.log(` ${dim("·")} widgets/<name>/ no longer becomes a view — add ${bold("src/views/<name>.tsx")} by hand`);
227
+ if (inPlace) {
228
+ console.log(` ${dim("·")} ${bold(".waniwani/")} is dead weight — delete it`);
229
+ }
230
+ console.log(`\n${bold("From here")}`);
231
+ console.log(` npm install && npm run dev`);
232
+ console.log(`\n${yellow("!")} ${dim("one way — nothing turns an ejected repo back")}`);
233
+ return 0;
234
+ }
235
+ /**
236
+ * Mirror app-folder edits into the build output; nodemon and Vite do the rest.
237
+ * The template is resolved once at startup and reused, so a dev loop never
238
+ * touches the network.
239
+ */
240
+ function watchApp(appRoot, template) {
241
+ let pending;
242
+ const rebuild = () => {
243
+ clearTimeout(pending);
244
+ pending = setTimeout(async () => {
245
+ const app = scanApp(appRoot);
246
+ const report = await validateApp(app);
247
+ if (!report.ok) {
248
+ printReport(app, report);
249
+ return;
250
+ }
251
+ // Rewriting the output restarts nodemon and triggers Vite HMR.
252
+ generate(app, { template });
253
+ console.log(dim(`[waniwani] regenerated ${new Date().toLocaleTimeString()}`));
254
+ }, 120);
255
+ };
256
+ for (const dir of ["tools", "widgets", "flows", "api"]) {
257
+ const path = join(appRoot, dir);
258
+ if (existsSync(path)) {
259
+ watch(path, { recursive: true }, rebuild);
260
+ }
261
+ }
262
+ const config = join(appRoot, "waniwani.config.ts");
263
+ if (existsSync(config)) {
264
+ watch(config, rebuild);
265
+ }
266
+ }
267
+ /**
268
+ * The framework's dev server, under this CLI's narration.
269
+ *
270
+ * `--plain` trades the framework's interactive UI for one plain line per
271
+ * diagnostic on stderr, which is what makes the output rewritable. It also drops
272
+ * the framework's auto-open of its own DevTools page in the browser; the URL is
273
+ * printed instead.
274
+ */
275
+ function devServer(outDir) {
276
+ return run("node", [frameworkBin(), "dev", "--plain"], {
277
+ cwd: outDir,
278
+ stderrFilter: devFilter(),
279
+ });
280
+ }
281
+ /** Flags that take a value; everything else is a boolean switch. */
282
+ const VALUE_FLAGS = new Set(["out", "template", "name"]);
283
+ /**
284
+ * `--out dir` / `--template=github:o/r#ref` alongside a positional app directory.
285
+ *
286
+ * `--no-install` sets `install` to false, so a switch that is on by default is
287
+ * read as one flag with two states instead of two flags a caller can set to
288
+ * contradict each other.
289
+ */
290
+ function parseArgs(argv) {
291
+ const flags = {};
292
+ const positional = [];
293
+ for (let i = 0; i < argv.length; i++) {
294
+ const arg = argv[i];
295
+ if (!arg.startsWith("--")) {
296
+ positional.push(arg);
297
+ continue;
298
+ }
299
+ const [name, inline] = arg.slice(2).split("=");
300
+ if (name.startsWith("no-")) {
301
+ flags[name.slice(3)] = false;
302
+ continue;
303
+ }
304
+ flags[name] = VALUE_FLAGS.has(name) ? (inline ?? argv[++i]) : true;
305
+ }
306
+ return { flags, positional };
307
+ }
308
+ async function main() {
309
+ const [command = "dev", ...rest] = process.argv.slice(2);
310
+ const { flags, positional } = parseArgs(rest);
311
+ const appRoot = resolve(positional[0] ?? process.cwd());
312
+ if (BANNERED.has(command)) {
313
+ banner(PACKAGE_VERSION);
314
+ }
315
+ // Before anything is spawned, so every child inherits the app's variables
316
+ // whatever order its modules evaluate in. `init` has no app to read yet.
317
+ if (command !== "init") {
318
+ loadAppEnv(appRoot);
319
+ }
320
+ if (command === "init") {
321
+ // Whether a directory was named matters only here: with none, the answer to
322
+ // the one question decides where the app goes.
323
+ process.exit(await init(appRoot, flags, { targeted: positional.length > 0 }));
324
+ }
325
+ if (command === "check") {
326
+ const app = scanApp(appRoot);
327
+ const report = await validateApp(app);
328
+ printReport(app, report);
329
+ process.exit(report.ok ? 0 : 1);
330
+ }
331
+ if (command === "dev") {
332
+ const prepared = await prepare(appRoot, flags);
333
+ if (!prepared)
334
+ process.exit(1);
335
+ watchApp(appRoot, prepared.template);
336
+ process.exit(await devServer(prepared.outDir));
337
+ }
338
+ if (command === "build") {
339
+ const prepared = await prepare(appRoot, flags);
340
+ if (!prepared)
341
+ process.exit(1);
342
+ const code = await build(prepared.outDir, prepared.app.root);
343
+ if (code !== 0)
344
+ process.exit(code);
345
+ console.log(`\n${green("✓")} built ${bold(prepared.outDir)}`);
346
+ process.exit(0);
347
+ }
348
+ if (command === "start") {
349
+ const outDir = join(appRoot, ".waniwani");
350
+ if (!existsSync(join(outDir, "dist"))) {
351
+ console.error(red("no build output — run `waniwani build` first"));
352
+ process.exit(1);
353
+ }
354
+ process.exit(await run("node", [frameworkBin(), "start"], { cwd: outDir, stdoutFilter: startFilter() }));
355
+ }
356
+ if (command === "eject") {
357
+ process.exit(await eject(appRoot, flags));
358
+ }
359
+ console.error(red(`unknown command: ${command}`));
360
+ console.error(dim("usage: waniwani <init|check|dev|build|start|eject> [dir]"));
361
+ process.exit(1);
362
+ }
363
+ try {
364
+ await main();
365
+ }
366
+ catch (error) {
367
+ // Template resolution and generation failures are expected conditions —
368
+ // a bad ref, an unreachable network, a template whose shape moved.
369
+ console.error(`\n${red("✗")} ${error instanceof Error ? error.message : String(error)}`);
370
+ if (DEBUG) {
371
+ console.error(error);
372
+ }
373
+ else {
374
+ console.error(dim("set WANIWANI_DEBUG=1 for the stack trace"));
375
+ }
376
+ process.exit(1);
377
+ }
378
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../cli/index.ts"],"names":[],"mappings":"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"}