@lenne.tech/cli 1.19.0 → 1.21.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.
- package/README.md +19 -0
- package/build/commands/frontend/angular.js +110 -4
- package/build/commands/frontend/nuxt.js +184 -13
- package/build/commands/fullstack/add-api.js +360 -0
- package/build/commands/fullstack/add-app.js +284 -0
- package/build/commands/fullstack/init.js +46 -0
- package/build/commands/local/down.js +71 -0
- package/build/commands/local/init.js +162 -0
- package/build/commands/local/local.js +30 -0
- package/build/commands/local/status.js +69 -0
- package/build/commands/local/up.js +148 -0
- package/build/commands/ports/ports.js +118 -0
- package/build/commands/ports/scan.js +131 -0
- package/build/commands/server/create.js +118 -7
- package/build/commands/status.js +79 -6
- package/build/commands/tools/ocr.js +6 -1
- package/build/extensions/server.js +14 -4
- package/build/lib/local-patches.js +175 -0
- package/build/lib/local-project.js +101 -0
- package/build/lib/port-registry.js +304 -0
- package/build/lib/workspace-integration.js +351 -0
- package/docs/commands.md +292 -4
- package/package.json +8 -10
package/docs/commands.md
CHANGED
|
@@ -12,6 +12,8 @@ This document provides a comprehensive reference for all `lt` CLI commands. For
|
|
|
12
12
|
|
|
13
13
|
- [CLI Commands](#cli-commands)
|
|
14
14
|
- [Server Commands](#server-commands)
|
|
15
|
+
- [Local Development Commands](#local-development-commands)
|
|
16
|
+
- [Ports Commands](#ports-commands)
|
|
15
17
|
- [Git Commands](#git-commands)
|
|
16
18
|
- [Fullstack Commands](#fullstack-commands)
|
|
17
19
|
- [Deployment Commands](#deployment-commands)
|
|
@@ -67,7 +69,7 @@ lt cli rename <new-name>
|
|
|
67
69
|
|
|
68
70
|
### `lt server create`
|
|
69
71
|
|
|
70
|
-
Creates a new NestJS server project.
|
|
72
|
+
Creates a new standalone NestJS server project in a sibling directory. For an in-workspace API, prefer [`lt fullstack add-api`](#lt-fullstack-add-api).
|
|
71
73
|
|
|
72
74
|
**Usage:**
|
|
73
75
|
```bash
|
|
@@ -77,17 +79,27 @@ lt server create [name] [options]
|
|
|
77
79
|
**Options:**
|
|
78
80
|
| Option | Description |
|
|
79
81
|
|--------|-------------|
|
|
82
|
+
| `--name <name>` | Server name (preferred over the positional argument) |
|
|
80
83
|
| `--description <text>` | Project description |
|
|
81
84
|
| `--author <name>` | Author name |
|
|
82
85
|
| `--api-mode <Rest\|GraphQL\|Both>` | API mode (ignored with `--next`) |
|
|
83
86
|
| `--framework-mode <npm\|vendor>` | Framework consumption mode (ignored with `--next`) |
|
|
87
|
+
| `--framework-upstream-branch <ref>` | Upstream `nest-server` branch/tag/commit to vendor (only with `--framework-mode vendor`) |
|
|
84
88
|
| `--branch <branch>` / `-b` | Branch of nest-server-starter to use as template |
|
|
85
89
|
| `--copy <path>` / `-c` | Copy from local template directory instead of cloning |
|
|
86
90
|
| `--link <path>` | Symlink to local template directory (fastest, changes affect original) |
|
|
87
91
|
| `--git` | Initialize git repository |
|
|
88
92
|
| `--next` | **Experimental:** clone [`nest-base`](https://github.com/lenneTech/nest-base) (Bun + Prisma 7 + Postgres + Better-Auth) instead of `nest-server-starter`. Skips API-mode / vendor-mode / install / lt.config.json processing. |
|
|
93
|
+
| `--dry-run` | Print the resolved plan and exit without making any changes |
|
|
94
|
+
| `--force` | Override the workspace-detection abort under `--noConfirm` |
|
|
89
95
|
| `--noConfirm` | Skip confirmation prompts |
|
|
90
96
|
|
|
97
|
+
**Workspace-awareness:** When run inside a directory that already looks like a fullstack workspace (contains `pnpm-workspace.yaml` or `projects/`), the command behaves differently per mode:
|
|
98
|
+
|
|
99
|
+
- **interactive** → asks for confirmation before creating a stray standalone clone
|
|
100
|
+
- **`--noConfirm` without `--force`** → **refuses** with exit code 1 and points the caller to `lt fullstack add-api`. This is the default behaviour for AI agents and CI scripts: fail loud rather than produce a stray clone that pnpm-workspace.yaml does not pick up.
|
|
101
|
+
- **`--noConfirm --force`** → proceeds and logs a hint so the override is visible in CI logs.
|
|
102
|
+
|
|
91
103
|
**CLAUDE.md Patching:** If the project contains a `CLAUDE.md`, the generic API mode description is replaced with the selected mode. In single-mode projects (`Rest` or `GraphQL`), the "API Mode System" documentation section is condensed to a brief note. Skipped when `--next` is used.
|
|
92
104
|
|
|
93
105
|
**Configuration:** `commands.server.create.*`, `defaults.author`, `defaults.noConfirm`
|
|
@@ -272,6 +284,193 @@ For mode-aware update workflows after conversion, use:
|
|
|
272
284
|
|
|
273
285
|
---
|
|
274
286
|
|
|
287
|
+
## Local Development Commands
|
|
288
|
+
|
|
289
|
+
Orchestrate parallel lt projects on the same machine without port collisions. Each project gets a deterministic port slot derived from its slug; API/App ports are always slot-paired (`3000+slot*10` / `3001+slot*10`). Slot allocation is reproducible across machines (FNV-1a hash) and persisted in `~/.lenneTech/ports.json`.
|
|
290
|
+
|
|
291
|
+
### `lt local`
|
|
292
|
+
|
|
293
|
+
Open the local-orchestration submenu.
|
|
294
|
+
|
|
295
|
+
**Usage:**
|
|
296
|
+
```bash
|
|
297
|
+
lt local
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Alias:** `lt l`
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
### `lt local init`
|
|
305
|
+
|
|
306
|
+
Register the current project in the central port registry, optionally patching legacy hardcoded ports to be env-aware.
|
|
307
|
+
|
|
308
|
+
**Usage:**
|
|
309
|
+
```bash
|
|
310
|
+
lt local init [options]
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**Alias:** `lt l i`
|
|
314
|
+
|
|
315
|
+
**Options:**
|
|
316
|
+
| Option | Description |
|
|
317
|
+
|--------|-------------|
|
|
318
|
+
| `--slot <n>` | Force a specific slot index (0..89) instead of the deterministic slug hash |
|
|
319
|
+
| `--patch` | Apply env-aware port patches non-interactively |
|
|
320
|
+
| `--no-patch` | Skip the patch detection / prompt entirely |
|
|
321
|
+
| `--noConfirm` | Skip confirmation prompts (without `--patch`, patches are skipped) |
|
|
322
|
+
|
|
323
|
+
**What it does:**
|
|
324
|
+
1. Detects the workspace layout (monorepo with `projects/api/` + `projects/app/`, or standalone API/App project).
|
|
325
|
+
2. Looks up or allocates a slot via FNV-1a hash of the project slug. If the slot is taken, falls through linearly to the next free slot.
|
|
326
|
+
3. Detects legacy hardcoded ports in `config.env.ts` (`port: 3000`), `nuxt.config.ts` (`port: 3001`, vite proxy `target: 'http://localhost:3000'`), and `playwright.config.ts` (`baseURL`/`host`/`url: 'http://localhost:3001'`). If `--patch` (or interactive confirm), rewrites them to env-overridable form (`Number(process.env.PORT) || 3000`, `process.env.NUXT_API_URL || …`, etc.) — defaults preserved, idempotent.
|
|
327
|
+
4. Persists the entry to `~/.lenneTech/ports.json`.
|
|
328
|
+
5. Adds `.lt-local/` to the project's `.gitignore`.
|
|
329
|
+
6. Injects (or refreshes) a "Local Development (lt local)" port block into `CLAUDE.md` files at the workspace root and inside each subproject — bracketed by HTML comment markers so it can be replaced cleanly when ports change.
|
|
330
|
+
|
|
331
|
+
**Examples:**
|
|
332
|
+
```bash
|
|
333
|
+
# Inside a workspace or standalone project
|
|
334
|
+
lt local init
|
|
335
|
+
|
|
336
|
+
# Force slot 5 for predictable cross-team ports
|
|
337
|
+
lt local init --slot 5 --noConfirm --patch
|
|
338
|
+
|
|
339
|
+
# Register without touching any source files
|
|
340
|
+
lt local init --no-patch --noConfirm
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
### `lt local up`
|
|
346
|
+
|
|
347
|
+
Start the API + App with project-specific ports. Spawns `pnpm start` (api) and `pnpm dev` (app) detached; persists PIDs to `<root>/.lt-local/state.json`.
|
|
348
|
+
|
|
349
|
+
**Usage:**
|
|
350
|
+
```bash
|
|
351
|
+
lt local up
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
**Alias:** `lt l u`
|
|
355
|
+
|
|
356
|
+
**Environment variables injected into both children:**
|
|
357
|
+
| Variable | Consumer | Example value |
|
|
358
|
+
|----------|----------|---------------|
|
|
359
|
+
| `PORT` | Nest (api) / Nuxt dev server (app) | slot-derived |
|
|
360
|
+
| `BASE_URL` | nest-server config.env.ts (canonical API base) | `http://localhost:3030` |
|
|
361
|
+
| `APP_URL` | nest-server config.env.ts (frontend origin for redirects/CORS) | `http://localhost:3031` |
|
|
362
|
+
| `NUXT_API_URL` | Nuxt vite-proxy target for `/api`, `/iam`, … | `http://localhost:3030` |
|
|
363
|
+
| `NUXT_PUBLIC_API_URL` | Nuxt `useRuntimeConfig().public.apiUrl` | `http://localhost:3030` |
|
|
364
|
+
| `NUXT_PUBLIC_SITE_URL` | Nuxt `useRuntimeConfig().public.siteUrl` + Playwright | `http://localhost:3031` |
|
|
365
|
+
| `NUXT_PUBLIC_STORAGE_PREFIX` | namespaces sessionStorage/localStorage so parallel projects don't share auth tokens | `crm-local` |
|
|
366
|
+
| `NSC__MONGOOSE__URI` | nest-server-config Mongoose URI (only when `dbName` is known) | `mongodb://127.0.0.1/crm-local` |
|
|
367
|
+
|
|
368
|
+
**Override the binary** used for both spawns by setting `LT_PNPM_BIN` (e.g. `LT_PNPM_BIN=/usr/local/bin/pnpm lt local up`).
|
|
369
|
+
|
|
370
|
+
**Pre-flight guards (exit code 1 each):**
|
|
371
|
+
- Project not registered (`lt local init` first)
|
|
372
|
+
- Already running (run `lt local down` first)
|
|
373
|
+
- Port already in use by another process
|
|
374
|
+
|
|
375
|
+
**Logs:** `<root>/.lt-local/api.log`, `<root>/.lt-local/app.log` (append-mode).
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
### `lt local down`
|
|
380
|
+
|
|
381
|
+
Stop processes started by `lt local up`. Sends `SIGTERM` to the detached process group (negative PID) so descendants — Vite, the Nest watcher, etc. — receive the signal too. Falls back to single-PID kill if the process group send fails (`EPERM`).
|
|
382
|
+
|
|
383
|
+
**Usage:**
|
|
384
|
+
```bash
|
|
385
|
+
lt local down
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**Alias:** `lt l d`
|
|
389
|
+
|
|
390
|
+
PID values from `state.json` are validated (positive integer in `[100, 2^31)`) before any signal is sent, so a tampered state file cannot cause `lt local down` to signal arbitrary process groups.
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
### `lt local status`
|
|
395
|
+
|
|
396
|
+
Show what is registered + running for the current project: slot, ports, db URI, PIDs (alive/dead), and live `lsof` state of the assigned ports.
|
|
397
|
+
|
|
398
|
+
**Usage:**
|
|
399
|
+
```bash
|
|
400
|
+
lt local status
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Alias:** `lt l s`
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## Ports Commands
|
|
408
|
+
|
|
409
|
+
Inspect the port registry and currently-bound dev ports across all your lt projects. Useful for diagnosing collisions and rebuilding the registry from disk.
|
|
410
|
+
|
|
411
|
+
### `lt ports`
|
|
412
|
+
|
|
413
|
+
List all reserved registry entries side-by-side with the live `lsof` state. Issues a single `lsof` call internally for the entire slot range (3000–3899) instead of per port — runs in ~150ms regardless of how many projects are registered.
|
|
414
|
+
|
|
415
|
+
**Usage:**
|
|
416
|
+
```bash
|
|
417
|
+
lt ports
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**Alias:** `lt p`
|
|
421
|
+
|
|
422
|
+
**Output sections:**
|
|
423
|
+
1. **Reserved ports (registry)** — every project entry with a `●` (bound) or `○` (free) indicator per port.
|
|
424
|
+
2. **Currently bound dev ports (3000–3899)** — every port in the slot range that currently has a LISTEN socket, with command + PID + owning registry entry (if any).
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
### `lt ports check <port>`
|
|
429
|
+
|
|
430
|
+
Exit-coded port probe — useful in shell scripts.
|
|
431
|
+
|
|
432
|
+
**Usage:**
|
|
433
|
+
```bash
|
|
434
|
+
lt ports check <port>
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**Exit codes:**
|
|
438
|
+
| Code | Meaning |
|
|
439
|
+
|------|---------|
|
|
440
|
+
| `0` | Port is free |
|
|
441
|
+
| `1` | Port is in use |
|
|
442
|
+
| `2` | `lsof` not available, or `<port>` argument missing/invalid |
|
|
443
|
+
|
|
444
|
+
**Example:**
|
|
445
|
+
```bash
|
|
446
|
+
if lt ports check 3000; then
|
|
447
|
+
echo "API port free"
|
|
448
|
+
else
|
|
449
|
+
echo "API port already bound"
|
|
450
|
+
fi
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
### `lt ports scan [dir]`
|
|
456
|
+
|
|
457
|
+
Rebuild the registry from the filesystem. Walks the given directory (default: cwd) up to depth 3, looking for `lt.config.json` + `package.json` pairs or workspace markers (`pnpm-workspace.yaml`, `projects/`). Re-allocates a slot for new projects; preserves slots for existing entries (only refreshing the path if it moved). Writes only when the registry actually changed (no mtime churn for cloud-sync tools).
|
|
458
|
+
|
|
459
|
+
**Usage:**
|
|
460
|
+
```bash
|
|
461
|
+
lt ports scan [dir]
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
**Examples:**
|
|
465
|
+
```bash
|
|
466
|
+
lt ports scan # scan from cwd
|
|
467
|
+
lt ports scan ~/code/lenneTech # scan a specific tree
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
Symlinks are skipped to avoid traversal loops; dotdirs and `node_modules` are not descended into.
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
275
474
|
## Git Commands
|
|
276
475
|
|
|
277
476
|
All git commands support the `--noConfirm` flag and can be configured via `defaults.noConfirm` or `commands.git.noConfirm`.
|
|
@@ -558,6 +757,82 @@ Additionally, the API's `CLAUDE.md` is patched to reflect the selected API mode
|
|
|
558
757
|
|
|
559
758
|
**Configuration:** `commands.fullstack.*`, `defaults.noConfirm`
|
|
560
759
|
|
|
760
|
+
**Auto-detection in existing workspaces:** When `lt fullstack init` runs without a name argument inside a directory that already looks like a fullstack workspace (contains `pnpm-workspace.yaml` or `projects/`), it inspects the layout and dispatches to the matching incremental command:
|
|
761
|
+
|
|
762
|
+
- both `projects/api` and `projects/app` exist → refuses with a hint to use `add-api` / `add-app` directly
|
|
763
|
+
- only `projects/app` exists → delegates to `lt fullstack add-api` (with all original flags forwarded)
|
|
764
|
+
- only `projects/api` exists → delegates to `lt fullstack add-app`
|
|
765
|
+
- neither exists → falls through to the regular new-workspace flow
|
|
766
|
+
|
|
767
|
+
To force a brand-new workspace from inside an existing one, pass `--name <slug>`.
|
|
768
|
+
|
|
769
|
+
---
|
|
770
|
+
|
|
771
|
+
### `lt fullstack add-api`
|
|
772
|
+
|
|
773
|
+
Add a NestJS API (`projects/api/`) to an existing fullstack workspace that currently only contains a frontend (`projects/app/`). Mirrors every API-related flag from `lt fullstack init` so configuration stays consistent across both flows.
|
|
774
|
+
|
|
775
|
+
**Usage:**
|
|
776
|
+
```bash
|
|
777
|
+
lt fullstack add-api [options]
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
**Options:**
|
|
781
|
+
| Option | Description |
|
|
782
|
+
|--------|-------------|
|
|
783
|
+
| `--api-mode <mode>` | API mode: `Rest`, `GraphQL`, or `Both` |
|
|
784
|
+
| `--framework-mode <mode>` | Backend framework consumption mode: `npm` (classic) or `vendor` (core copied to `src/core/`) |
|
|
785
|
+
| `--framework-upstream-branch <ref>` | Upstream `nest-server` branch/tag/commit to vendor (only with `--framework-mode vendor`) |
|
|
786
|
+
| `--api-branch <branch>` | Branch of `nest-server-starter` to clone |
|
|
787
|
+
| `--api-copy <path>` | Copy API from a local template directory |
|
|
788
|
+
| `--api-link <path>` | Symlink API to a local template directory (fastest, changes affect original) |
|
|
789
|
+
| `--next` | **Experimental:** clone [`nest-base`](https://github.com/lenneTech/nest-base) (Bun + Prisma 7 + Postgres + Better-Auth) instead of `nest-server-starter`. Forces `--api-mode Rest` and `--framework-mode npm`, runs `bun run rename` post-clone, skips workspace install. |
|
|
790
|
+
| `--workspace-dir <path>` | Workspace root. When omitted, defaults to cwd; if cwd is not a workspace, the command walks up until it finds one (so it works from inside `projects/api/src/`). |
|
|
791
|
+
| `--skip-install` | Skip `pnpm install` and the post-install format pass |
|
|
792
|
+
| `--dry-run` | Print the resolved plan without making any changes |
|
|
793
|
+
| `--noConfirm` | Skip all interactive prompts |
|
|
794
|
+
|
|
795
|
+
**Refusal cases:**
|
|
796
|
+
- `projects/api/` already exists → suggests `lt fullstack init` in a fresh directory
|
|
797
|
+
- no workspace detected at the target path → asks the user to run `lt fullstack init` first
|
|
798
|
+
|
|
799
|
+
**Side effects:** writes `projects/api/lt.config.json` with the resolved `apiMode` + `frameworkMode`, hoists workspace-scoped `pnpm.overrides` from sub-projects to the root, runs `pnpm install` + `oxfmt` on the new sub-project (unless `--skip-install` is set).
|
|
800
|
+
|
|
801
|
+
**Configuration:** Reads `commands.fullstack.*` (same keys as `lt fullstack init`).
|
|
802
|
+
|
|
803
|
+
---
|
|
804
|
+
|
|
805
|
+
### `lt fullstack add-app`
|
|
806
|
+
|
|
807
|
+
Add a frontend app (`projects/app/`) to an existing fullstack workspace that currently only contains an API (`projects/api/`). Mirrors every frontend-related flag from `lt fullstack init`.
|
|
808
|
+
|
|
809
|
+
**Usage:**
|
|
810
|
+
```bash
|
|
811
|
+
lt fullstack add-app [options]
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
**Options:**
|
|
815
|
+
| Option | Description |
|
|
816
|
+
|--------|-------------|
|
|
817
|
+
| `--frontend <type>` | Frontend framework: `nuxt` or `angular` |
|
|
818
|
+
| `--frontend-framework-mode <mode>` | Frontend framework consumption mode: `npm` or `vendor` (nuxt-extensions copied to `app/core/`) |
|
|
819
|
+
| `--frontend-branch <branch>` | Branch of the frontend starter to clone (`ng-base-starter` or `nuxt-base-starter`) |
|
|
820
|
+
| `--frontend-copy <path>` | Copy frontend from a local template directory |
|
|
821
|
+
| `--frontend-link <path>` | Symlink frontend to a local template directory (fastest, changes affect original) |
|
|
822
|
+
| `--next` | Default the nuxt-base-starter ref to the `next` branch (auth `basePath` aligned with the experimental `--next` API) |
|
|
823
|
+
| `--workspace-dir <path>` | Workspace root. When omitted, defaults to cwd; if cwd is not a workspace, the command walks up until it finds one (so it works from inside `projects/api/src/`). |
|
|
824
|
+
| `--skip-install` | Skip `pnpm install` and the post-install format pass |
|
|
825
|
+
| `--dry-run` | Print the resolved plan without making any changes |
|
|
826
|
+
| `--noConfirm` | Skip all interactive prompts |
|
|
827
|
+
|
|
828
|
+
**Refusal cases:**
|
|
829
|
+
- `projects/app/` already exists → suggests `lt fullstack init` in a fresh directory
|
|
830
|
+
- no workspace detected at the target path → asks the user to run `lt fullstack init` first
|
|
831
|
+
|
|
832
|
+
**Side effects:** patches `projects/app/.env` with a project-specific `NUXT_PUBLIC_STORAGE_PREFIX`, optionally vendorizes `nuxt-extensions` into `app/core/`, hoists workspace-scoped `pnpm.overrides`, runs `pnpm install` + `oxfmt` on the new sub-project (unless `--skip-install` is set).
|
|
833
|
+
|
|
834
|
+
**Configuration:** Reads `commands.fullstack.*` (same keys as `lt fullstack init`).
|
|
835
|
+
|
|
561
836
|
---
|
|
562
837
|
|
|
563
838
|
### `lt fullstack convert-mode`
|
|
@@ -689,7 +964,7 @@ lt npm update
|
|
|
689
964
|
|
|
690
965
|
### `lt frontend angular`
|
|
691
966
|
|
|
692
|
-
Creates a new Angular workspace using ng-base-starter.
|
|
967
|
+
Creates a new standalone Angular workspace using ng-base-starter. For an in-workspace app, prefer [`lt fullstack add-app --frontend angular`](#lt-fullstack-add-app).
|
|
693
968
|
|
|
694
969
|
**Usage:**
|
|
695
970
|
```bash
|
|
@@ -699,21 +974,26 @@ lt frontend angular [name] [options]
|
|
|
699
974
|
**Options:**
|
|
700
975
|
| Option | Description |
|
|
701
976
|
|--------|-------------|
|
|
977
|
+
| `--name <name>` | Workspace name (preferred over the positional argument) |
|
|
702
978
|
| `--branch <branch>` / `-b` | Branch of ng-base-starter to use as template |
|
|
703
979
|
| `--copy <path>` / `-c` | Copy from local template directory instead of cloning |
|
|
704
980
|
| `--link <path>` | Symlink to local template directory (fastest, changes affect original) |
|
|
705
981
|
| `--localize` | Enable Angular localize |
|
|
706
982
|
| `--noLocalize` | Disable Angular localize |
|
|
707
983
|
| `--gitLink <url>` | Git repository URL to link |
|
|
984
|
+
| `--dry-run` | Print the resolved plan and exit without making any changes |
|
|
985
|
+
| `--force` | Override the workspace-detection abort under `--noConfirm` |
|
|
708
986
|
| `--noConfirm` / `-y` | Skip confirmation prompts |
|
|
709
987
|
|
|
988
|
+
**Workspace-awareness:** Inside a fullstack workspace the command is interactive (confirm prompt), but under `--noConfirm` it **refuses** with exit code 1 and points the caller to `lt fullstack add-app --frontend angular`. Pass `--noConfirm --force` to override (rare).
|
|
989
|
+
|
|
710
990
|
**Configuration:** `commands.frontend.angular.*`, `defaults.noConfirm`
|
|
711
991
|
|
|
712
992
|
---
|
|
713
993
|
|
|
714
994
|
### `lt frontend nuxt`
|
|
715
995
|
|
|
716
|
-
Creates a new Nuxt workspace using nuxt-base-starter.
|
|
996
|
+
Creates a new standalone Nuxt workspace using nuxt-base-starter. For an in-workspace app, prefer [`lt fullstack add-app --frontend nuxt`](#lt-fullstack-add-app).
|
|
717
997
|
|
|
718
998
|
**Usage:**
|
|
719
999
|
```bash
|
|
@@ -723,16 +1003,24 @@ lt frontend nuxt [options]
|
|
|
723
1003
|
**Options:**
|
|
724
1004
|
| Option | Description |
|
|
725
1005
|
|--------|-------------|
|
|
1006
|
+
| `--name <name>` | Workspace name |
|
|
726
1007
|
| `--branch <branch>` / `-b` | Branch of nuxt-base-starter to use (uses git clone instead of create-nuxt-base) |
|
|
727
1008
|
| `--copy <path>` / `-c` | Copy from local template directory instead of cloning |
|
|
728
1009
|
| `--link <path>` | Symlink to local template directory (fastest, changes affect original) |
|
|
1010
|
+
| `--frontend-framework-mode <npm\|vendor>` | Frontend framework consumption mode (`vendor` copies `nuxt-extensions` into `app/core/`) |
|
|
1011
|
+
| `--next` | Default branch to `nuxt-base-starter#next` (auth `basePath` aligned with the experimental `--next` API) |
|
|
1012
|
+
| `--dry-run` | Print the resolved plan and exit without making any changes |
|
|
1013
|
+
| `--force` | Override the workspace-detection abort under `--noConfirm` |
|
|
1014
|
+
| `--noConfirm` | Skip confirmation prompts (requires `--name`) |
|
|
729
1015
|
|
|
730
1016
|
**Note:** For `--copy` and `--link`, specify the path to the `nuxt-base-template/` subdirectory, not the repository root:
|
|
731
1017
|
```bash
|
|
732
1018
|
lt frontend nuxt --copy /path/to/nuxt-base-starter/nuxt-base-template
|
|
733
1019
|
```
|
|
734
1020
|
|
|
735
|
-
**
|
|
1021
|
+
**Workspace-awareness:** Inside a fullstack workspace the command is interactive (confirm prompt), but under `--noConfirm` it **refuses** with exit code 1 and points the caller to `lt fullstack add-app --frontend nuxt`. Pass `--noConfirm --force` to override (rare).
|
|
1022
|
+
|
|
1023
|
+
**Configuration:** `commands.frontend.nuxt.*`, `commands.fullstack.frontendFrameworkMode` (shared with `init` / `add-app`)
|
|
736
1024
|
|
|
737
1025
|
---
|
|
738
1026
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lenne.tech/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"description": "lenne.Tech CLI: lt",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lenne.Tech",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"coverage": "jest --coverage",
|
|
32
32
|
"test:vendor-init": "bash scripts/test-vendor-init.sh",
|
|
33
33
|
"test:frontend-vendor-init": "bash scripts/test-frontend-vendor-init.sh",
|
|
34
|
+
"test:incremental-fullstack": "bash scripts/test-incremental-fullstack.sh",
|
|
34
35
|
"format": "prettier --write 'src/**/*.{js,ts,tsx,json}' '!src/templates/**/*'",
|
|
35
36
|
"lint": "eslint './src/**/*.{ts,js,vue}'",
|
|
36
37
|
"lint:fix": "eslint './src/**/*.{ts,js,vue}' --fix",
|
|
@@ -57,16 +58,16 @@
|
|
|
57
58
|
"bin"
|
|
58
59
|
],
|
|
59
60
|
"dependencies": {
|
|
60
|
-
"@aws-sdk/client-s3": "3.
|
|
61
|
+
"@aws-sdk/client-s3": "3.1045.0",
|
|
61
62
|
"@lenne.tech/cli-plugin-helper": "0.0.14",
|
|
62
|
-
"axios": "1.
|
|
63
|
+
"axios": "1.16.0",
|
|
63
64
|
"bcrypt": "6.0.0",
|
|
64
|
-
"defuddle": "0.
|
|
65
|
+
"defuddle": "0.18.1",
|
|
65
66
|
"glob": "13.0.6",
|
|
66
67
|
"gluegun": "5.2.2",
|
|
67
68
|
"js-sha256": "0.11.1",
|
|
68
69
|
"js-yaml": "4.1.1",
|
|
69
|
-
"jsdom": "29.
|
|
70
|
+
"jsdom": "29.1.1",
|
|
70
71
|
"lodash": "4.18.1",
|
|
71
72
|
"open": "11.0.0",
|
|
72
73
|
"playwright-core": "1.59.1",
|
|
@@ -84,15 +85,12 @@
|
|
|
84
85
|
"@types/js-yaml": "4.0.9",
|
|
85
86
|
"@types/jsdom": "28.0.1",
|
|
86
87
|
"@types/lodash": "4.17.24",
|
|
87
|
-
"@types/node": "25.6.
|
|
88
|
+
"@types/node": "25.6.2",
|
|
88
89
|
"@types/turndown": "5.0.6",
|
|
89
|
-
"@typescript-eslint/eslint-plugin": "8.58.2",
|
|
90
|
-
"@typescript-eslint/parser": "8.58.2",
|
|
91
90
|
"ejs": "5.0.2",
|
|
92
91
|
"eslint": "9.39.4",
|
|
93
|
-
"eslint-config-prettier": "10.1.8",
|
|
94
92
|
"husky": "9.1.7",
|
|
95
|
-
"jest": "30.
|
|
93
|
+
"jest": "30.4.2",
|
|
96
94
|
"prettier": "3.8.3",
|
|
97
95
|
"rimraf": "6.1.3",
|
|
98
96
|
"standard-version": "9.5.0",
|