@lenne.tech/cli 1.50.4 → 1.50.6
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/build/commands/dev/doctor.js +48 -42
- package/build/commands/dev/prune.js +1 -1
- package/build/commands/fullstack/update.js +6 -1
- package/build/extensions/api-mode.js +6 -2
- package/build/extensions/server.js +6 -16
- package/build/lib/caddy.js +18 -1
- package/build/lib/dev-ticket.js +8 -1
- package/build/lib/express-type-imports.js +54 -0
- package/build/templates/check/check.mjs +1 -1
- package/build/templates/check/lib/audit-report.mjs +12 -9
- package/build/templates/check/lt-monorepo-pin.json +5 -5
- package/package.json +8 -8
|
@@ -179,52 +179,58 @@ const DoctorCommand = {
|
|
|
179
179
|
// "matches the canonical CLI version" for a project whose `check` was
|
|
180
180
|
// completely broken — and doctor is the tool people reach for exactly
|
|
181
181
|
// then.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
182
|
+
//
|
|
183
|
+
// Workspace roots only: a standalone starter project carries its own
|
|
184
|
+
// `scripts/check.mjs`, which is not a drifted copy of the root wrapper,
|
|
185
|
+
// and `lt fullstack update` deliberately leaves it alone.
|
|
186
|
+
if (layout.workspace) {
|
|
187
|
+
try {
|
|
188
|
+
const { readFileSync: read } = yield Promise.resolve().then(() => __importStar(require('fs')));
|
|
189
|
+
const { join: j } = yield Promise.resolve().then(() => __importStar(require('path')));
|
|
190
|
+
const { keptWrapperReason, resolveCopySet } = yield Promise.resolve().then(() => __importStar(require('../../lib/heal-check-wrapper')));
|
|
191
|
+
const bundledCheck = j(__dirname, '..', '..', 'templates', 'check', 'check.mjs');
|
|
192
|
+
if (filesystem.exists(bundledCheck)) {
|
|
193
|
+
const missing = [];
|
|
194
|
+
const drifted = [];
|
|
195
|
+
for (const { rel, source } of resolveCopySet(bundledCheck)) {
|
|
196
|
+
const target = j(layout.root, rel);
|
|
197
|
+
if (!filesystem.exists(target)) {
|
|
198
|
+
missing.push(rel);
|
|
199
|
+
}
|
|
200
|
+
else if (read(target, 'utf8') !== read(source, 'utf8')) {
|
|
201
|
+
drifted.push(rel);
|
|
202
|
+
}
|
|
194
203
|
}
|
|
195
|
-
|
|
196
|
-
|
|
204
|
+
// A missing module only breaks `check` when the project's wrapper is the
|
|
205
|
+
// canonical one that imports it (or the wrapper itself is missing). An
|
|
206
|
+
// older wrapper does not import the newer modules (e.g. `lib/*.mjs`) and
|
|
207
|
+
// still runs — calling that "cannot start" would be a false alarm.
|
|
208
|
+
const wrapperDrifted = drifted.includes('scripts/check.mjs');
|
|
209
|
+
// A project wrapper that heal refuses to replace (newer release, or the same
|
|
210
|
+
// release with other content) is not drift to fix: pointing at
|
|
211
|
+
// `lt fullstack update` there would recommend a no-op or a downgrade.
|
|
212
|
+
const kept = keptWrapperReason(layout.root, bundledCheck);
|
|
213
|
+
if (kept) {
|
|
214
|
+
line('INFO', colors.cyan, `check wrapper: ${kept}`);
|
|
215
|
+
}
|
|
216
|
+
else if (missing.length > 0 && !wrapperDrifted) {
|
|
217
|
+
line('ERROR', colors.red, `check wrapper incomplete — missing ${missing.join(', ')}`);
|
|
218
|
+
line('ERROR', colors.red, ' `pnpm run check` cannot start; run `lt fullstack update` to install it');
|
|
219
|
+
}
|
|
220
|
+
else if (drifted.length > 0) {
|
|
221
|
+
const outdated = [...drifted, ...missing.map((rel) => `${rel} (missing)`)];
|
|
222
|
+
const verb = outdated.length === 1 ? 'differs' : 'differ';
|
|
223
|
+
line('WARN', colors.yellow, `${outdated.join(', ')} ${verb} from the canonical CLI version`);
|
|
224
|
+
line('WARN', colors.yellow, ' run `lt fullstack update` to sync it (skips uncommitted local edits)');
|
|
225
|
+
}
|
|
226
|
+
else if (filesystem.exists(j(layout.root, 'scripts', 'check.mjs'))) {
|
|
227
|
+
line('OK', colors.green, 'check wrapper matches the canonical CLI version');
|
|
197
228
|
}
|
|
198
|
-
}
|
|
199
|
-
// A missing module only breaks `check` when the project's wrapper is the
|
|
200
|
-
// canonical one that imports it (or the wrapper itself is missing). An
|
|
201
|
-
// older wrapper does not import the newer modules (e.g. `lib/*.mjs`) and
|
|
202
|
-
// still runs — calling that "cannot start" would be a false alarm.
|
|
203
|
-
const wrapperDrifted = drifted.includes('scripts/check.mjs');
|
|
204
|
-
// A project wrapper that heal refuses to replace (newer release, or the same
|
|
205
|
-
// release with other content) is not drift to fix: pointing at
|
|
206
|
-
// `lt fullstack update` there would recommend a no-op or a downgrade.
|
|
207
|
-
const kept = keptWrapperReason(layout.root, bundledCheck);
|
|
208
|
-
if (kept) {
|
|
209
|
-
line('INFO', colors.cyan, `check wrapper: ${kept}`);
|
|
210
|
-
}
|
|
211
|
-
else if (missing.length > 0 && !wrapperDrifted) {
|
|
212
|
-
line('ERROR', colors.red, `check wrapper incomplete — missing ${missing.join(', ')}`);
|
|
213
|
-
line('ERROR', colors.red, ' `pnpm run check` cannot start; run `lt fullstack update` to install it');
|
|
214
|
-
}
|
|
215
|
-
else if (drifted.length > 0) {
|
|
216
|
-
const outdated = [...drifted, ...missing.map((rel) => `${rel} (missing)`)];
|
|
217
|
-
const verb = outdated.length === 1 ? 'differs' : 'differ';
|
|
218
|
-
line('WARN', colors.yellow, `${outdated.join(', ')} ${verb} from the canonical CLI version`);
|
|
219
|
-
line('WARN', colors.yellow, ' run `lt fullstack update` to sync it (skips uncommitted local edits)');
|
|
220
|
-
}
|
|
221
|
-
else if (filesystem.exists(j(layout.root, 'scripts', 'check.mjs'))) {
|
|
222
|
-
line('OK', colors.green, 'check wrapper matches the canonical CLI version');
|
|
223
229
|
}
|
|
224
230
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
231
|
+
catch (_a) {
|
|
232
|
+
/* best-effort diagnostics */
|
|
233
|
+
}
|
|
228
234
|
}
|
|
229
235
|
// 7.6 oxlint config filename: oxlint only auto-discovers `.oxlintrc.json`.
|
|
230
236
|
// Apps from the template before the rename carry `oxlint.json`, whose
|
|
@@ -62,7 +62,7 @@ const PruneCommand = {
|
|
|
62
62
|
// driver; the api dir merely improves the driver fallback when present.
|
|
63
63
|
const observed = (0, dev_ticket_1.listDatabaseNames)(undefined, [mainLayout.apiDir, mainRepoRoot].filter(Boolean));
|
|
64
64
|
if (observed === null) {
|
|
65
|
-
warning('Could not list databases (mongosh missing or
|
|
65
|
+
warning('Could not list databases (mongosh missing, MongoDB unreachable, or mongosh slower than 10 s) — only the registry is pruned. Re-run to sweep the databases.');
|
|
66
66
|
}
|
|
67
67
|
const plan = (0, dev_prune_1.collectDevPrunePlan)({
|
|
68
68
|
loadRegistry: dev_state_1.loadRegistry,
|
|
@@ -195,8 +195,13 @@ const NewCommand = {
|
|
|
195
195
|
// pre-existing projects predate it. This idempotently installs the bundled
|
|
196
196
|
// wrapper (and rewrites the root `check`/`check:raw`) so a migrated project
|
|
197
197
|
// gets the quiet, report-driven check too. No-op once already wired.
|
|
198
|
+
//
|
|
199
|
+
// Only at a workspace root: the bundled file is lt-monorepo's ROOT wrapper.
|
|
200
|
+
// `projects/api` and standalone starter projects ship their own, unmarked
|
|
201
|
+
// `scripts/check.mjs`, which heal reads as legacy — run from there, this
|
|
202
|
+
// replaced the API's check and the starter's tests failed on its content.
|
|
198
203
|
const checkAsset = (0, path_1.join)(__dirname, '..', '..', 'templates', 'check', 'check.mjs');
|
|
199
|
-
const changedCheck = (0, heal_check_wrapper_1.healCheckWrapper)(cwd, checkAsset);
|
|
204
|
+
const changedCheck = isWorkspace ? (0, heal_check_wrapper_1.healCheckWrapper)(cwd, checkAsset) : [];
|
|
200
205
|
if (changedCheck.length > 0) {
|
|
201
206
|
info('');
|
|
202
207
|
// A skip entry is NOT a success — it means the wrapper stayed on its old
|
|
@@ -649,8 +649,12 @@ class ApiMode {
|
|
|
649
649
|
* For non-aliased imports, returns the identifier as-is.
|
|
650
650
|
*/
|
|
651
651
|
resolveImportAlias(identifier) {
|
|
652
|
-
|
|
653
|
-
|
|
652
|
+
// An inline `type` modifier is not part of the name: searching the code for the
|
|
653
|
+
// literal "type LookupAddress" found nothing, so a used specifier got pruned
|
|
654
|
+
// (nest-server's outbound-url.helper.ts → TS2304 in every vendor-mode project).
|
|
655
|
+
const name = identifier.replace(/^type\s+/, '');
|
|
656
|
+
const asMatch = name.match(/^\S+\s+as\s+(\S+)$/);
|
|
657
|
+
return asMatch ? asMatch[1] : name;
|
|
654
658
|
}
|
|
655
659
|
/**
|
|
656
660
|
* Collapse multiple consecutive blank lines into at most one
|
|
@@ -50,6 +50,7 @@ const ts = __importStar(require("typescript"));
|
|
|
50
50
|
const adopt_upstream_build_allowlist_1 = require("../lib/adopt-upstream-build-allowlist");
|
|
51
51
|
const check_freshness_hooks_1 = require("../lib/check-freshness-hooks");
|
|
52
52
|
const cross_env_1 = require("../lib/cross-env");
|
|
53
|
+
const express_type_imports_1 = require("../lib/express-type-imports");
|
|
53
54
|
const markdown_table_1 = require("../lib/markdown-table");
|
|
54
55
|
const migrate_scripts_1 = require("../lib/migrate-scripts");
|
|
55
56
|
const module_specifiers_1 = require("../lib/module-specifiers");
|
|
@@ -1229,12 +1230,10 @@ class Server {
|
|
|
1229
1230
|
// and type imports were erased before runtime. In vendor-mode, vitest/vite
|
|
1230
1231
|
// evaluates the TypeScript source directly and chokes with:
|
|
1231
1232
|
// "The requested module 'express' does not provide an export named 'Response'"
|
|
1232
|
-
// Fix:
|
|
1233
|
-
//
|
|
1234
|
-
//
|
|
1235
|
-
//
|
|
1236
|
-
// to the global Fetch API Request, not the express one.
|
|
1237
|
-
const expressImportRegex = /^import\s+\{([^}]*)\}\s+from\s+['"]express['"]\s*;?\s*$/gm;
|
|
1233
|
+
// Fix: mark the type names in every `import { … } from 'express'` of the
|
|
1234
|
+
// vendored core as type-only. Runtime exports (`json`, `urlencoded`, `Router`
|
|
1235
|
+
// …) stay value imports — see src/lib/express-type-imports.ts for why a
|
|
1236
|
+
// blanket `import type` broke the build (nest-server 11.42.4+).
|
|
1238
1237
|
// `glob`, not `filesystem.find`: jetpack builds its matcher by concatenating the
|
|
1239
1238
|
// RESOLVED base path in front of the pattern, and minimatch reads a backslash
|
|
1240
1239
|
// inside a PATTERN as an escape. On Windows `C:\…\core` + `**/*.ts` therefore
|
|
@@ -1249,16 +1248,7 @@ class Server {
|
|
|
1249
1248
|
const content = filesystem.read(absPath) || '';
|
|
1250
1249
|
if (!content.includes("from 'express'") && !content.includes('from "express"'))
|
|
1251
1250
|
continue;
|
|
1252
|
-
const patched =
|
|
1253
|
-
const cleanNames = names
|
|
1254
|
-
.split(',')
|
|
1255
|
-
.map((n) => n.trim())
|
|
1256
|
-
.filter((n) => n.length > 0 && n !== 'type')
|
|
1257
|
-
// Strip any pre-existing 'type ' prefix on individual names
|
|
1258
|
-
.map((n) => n.replace(/^type\s+/, ''))
|
|
1259
|
-
.join(', ');
|
|
1260
|
-
return `import type { ${cleanNames} } from 'express';`;
|
|
1261
|
-
});
|
|
1251
|
+
const patched = (0, express_type_imports_1.rewriteExpressImportsToTypeOnly)(content);
|
|
1262
1252
|
if (patched !== content) {
|
|
1263
1253
|
filesystem.write(absPath, patched);
|
|
1264
1254
|
}
|
package/build/lib/caddy.js
CHANGED
|
@@ -42,6 +42,8 @@ const path_1 = require("path");
|
|
|
42
42
|
const dev_process_1 = require("./dev-process");
|
|
43
43
|
const platform_1 = require("./platform");
|
|
44
44
|
const CADDYFILE_PATH = process.env.LT_DEV_CADDYFILE || (0, path_1.join)((0, os_1.homedir)(), '.lenneTech', 'Caddyfile');
|
|
45
|
+
/** Upstream connection cap per route — well below the 128 of macOS `somaxconn` (see `renderProjectBlock`). */
|
|
46
|
+
const UPSTREAM_MAX_CONNS = 32;
|
|
45
47
|
const HEADER = '# Managed by `lt dev`. Per-project blocks are bounded by `# >>> lt-dev:<slug> >>>` markers.';
|
|
46
48
|
/** Detect whether `caddy` is on PATH. */
|
|
47
49
|
function caddyAvailable() {
|
|
@@ -115,12 +117,27 @@ function removeProjectBlock(slug) {
|
|
|
115
117
|
* - `localhost` as Caddy upstream resolves to `::1` first on macOS,
|
|
116
118
|
* so it would still pick the IPv6 family and miss the IPv4 bind.
|
|
117
119
|
* Pinning to `127.0.0.1` removes that ambiguity entirely.
|
|
120
|
+
*
|
|
121
|
+
* Every upstream is capped at `UPSTREAM_MAX_CONNS` connections. The browser
|
|
122
|
+
* talks HTTP/2 to Caddy and multiplexes a cold `nuxt dev`'s first page load —
|
|
123
|
+
* around 800 raw modules — over one connection; Caddy used to fan that out
|
|
124
|
+
* into one upstream dial per request. The dev server's accept queue
|
|
125
|
+
* (`somaxconn`, 128 on macOS) overflowed, the excess dials got `connect:
|
|
126
|
+
* connection reset by peer`, Caddy answered 502, and a page missing a module
|
|
127
|
+
* never hydrated: the form looked fine and submitted natively. With the cap,
|
|
128
|
+
* Caddy queues the burst instead (Go's `MaxConnsPerHost` blocks the dial).
|
|
129
|
+
* `~/.lenneTech/caddy.err.log` held about 51 000 such resets across projects
|
|
130
|
+
* when this was found (lt-crm DEV-2899).
|
|
118
131
|
*/
|
|
119
132
|
function renderProjectBlock(slug, routes) {
|
|
120
133
|
const lines = [`# >>> lt-dev:${slug} >>>`];
|
|
121
134
|
for (const route of routes) {
|
|
122
135
|
lines.push(`${route.hostname} {`);
|
|
123
|
-
lines.push(` reverse_proxy 127.0.0.1:${route.upstreamPort}`);
|
|
136
|
+
lines.push(` reverse_proxy 127.0.0.1:${route.upstreamPort} {`);
|
|
137
|
+
lines.push(' transport http {');
|
|
138
|
+
lines.push(` max_conns_per_host ${UPSTREAM_MAX_CONNS}`);
|
|
139
|
+
lines.push(' }');
|
|
140
|
+
lines.push(' }');
|
|
124
141
|
lines.push('}');
|
|
125
142
|
}
|
|
126
143
|
lines.push(`# <<< lt-dev:${slug} <<<`);
|
package/build/lib/dev-ticket.js
CHANGED
|
@@ -260,7 +260,14 @@ function gitFetch(repoDir, remote = 'origin') {
|
|
|
260
260
|
function gitMainRepoRoot(cwd) {
|
|
261
261
|
// `--git-common-dir` is the SHARED `.git` (same for every worktree); its
|
|
262
262
|
// parent is the main repo root.
|
|
263
|
-
|
|
263
|
+
// stderr is captured, not inherited: every caller catches the throw for a
|
|
264
|
+
// non-git directory (a normal case for `lt dev up` / `lt dev prune`), so git's
|
|
265
|
+
// "fatal: not a git repository" belongs in the error, not on the terminal.
|
|
266
|
+
const commonDir = (0, child_process_1.execFileSync)('git', ['rev-parse', '--path-format=absolute', '--git-common-dir'], {
|
|
267
|
+
cwd,
|
|
268
|
+
encoding: 'utf8',
|
|
269
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
270
|
+
}).trim();
|
|
264
271
|
return (0, path_1.dirname)(commonDir);
|
|
265
272
|
}
|
|
266
273
|
/** True if `ref` resolves to a commit in the repo (any ref kind: local, remote, tag, sha). */
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Marks the TYPE names in a vendored file's `express` imports as type-only.
|
|
4
|
+
*
|
|
5
|
+
* Why it exists: express exports `Request`, `Response`, `NextFunction` & co. as types
|
|
6
|
+
* only. The npm-mode framework shipped compiled, so those imports were erased before
|
|
7
|
+
* runtime; vendor mode runs the TypeScript source through vitest/vite, which keeps a
|
|
8
|
+
* plain `import { Request } from 'express'` and fails with
|
|
9
|
+
* "The requested module 'express' does not provide an export named 'Request'".
|
|
10
|
+
*
|
|
11
|
+
* Why it does not simply rewrite the whole import to `import type`: express also has
|
|
12
|
+
* runtime exports, and the vendored core imports some of them as values —
|
|
13
|
+
* `core-body-parser.initializer.ts` (nest-server 11.42.4+) calls `json()` and
|
|
14
|
+
* `urlencoded()`. A blanket `import type { json, urlencoded }` broke the build of every
|
|
15
|
+
* generated vendor-mode project with TS1361. So only names that are NOT runtime exports
|
|
16
|
+
* become type-only; a mixed import keeps its values and gets inline `type` modifiers.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.rewriteExpressImportsToTypeOnly = rewriteExpressImportsToTypeOnly;
|
|
20
|
+
/**
|
|
21
|
+
* The runtime (value) exports of express — `lib/express.js`, v4 and v5. Everything
|
|
22
|
+
* else a TypeScript file can import from 'express' only exists in its type declarations.
|
|
23
|
+
*/
|
|
24
|
+
const EXPRESS_VALUE_EXPORTS = new Set([
|
|
25
|
+
'application',
|
|
26
|
+
'json',
|
|
27
|
+
'query',
|
|
28
|
+
'raw',
|
|
29
|
+
'request',
|
|
30
|
+
'response',
|
|
31
|
+
'Route',
|
|
32
|
+
'Router',
|
|
33
|
+
'static',
|
|
34
|
+
'text',
|
|
35
|
+
'urlencoded',
|
|
36
|
+
]);
|
|
37
|
+
// `[ \t]*`, not `\s*`, after the module name: `\s*$` under the `m` flag also swallowed
|
|
38
|
+
// the line break, and with it the blank line that usually follows the imports.
|
|
39
|
+
const EXPRESS_NAMED_IMPORT = /^import\s+\{([^}]*)\}\s+from\s+['"]express['"][ \t]*;?[ \t]*$/gm;
|
|
40
|
+
/** Rewrites every `import { … } from 'express'` in `content`; returns it unchanged when nothing applies. */
|
|
41
|
+
function rewriteExpressImportsToTypeOnly(content) {
|
|
42
|
+
return content.replace(EXPRESS_NAMED_IMPORT, (_match, names) => {
|
|
43
|
+
const specifiers = names
|
|
44
|
+
.split(',')
|
|
45
|
+
.map((n) => n.trim().replace(/^type\s+/, ''))
|
|
46
|
+
.filter((n) => n.length > 0);
|
|
47
|
+
const isValue = (specifier) => EXPRESS_VALUE_EXPORTS.has(specifier.split(/\s+as\s+/)[0].trim());
|
|
48
|
+
if (!specifiers.some(isValue)) {
|
|
49
|
+
return `import type { ${specifiers.join(', ')} } from 'express';`;
|
|
50
|
+
}
|
|
51
|
+
const marked = specifiers.map((s) => (isValue(s) ? s : `type ${s}`));
|
|
52
|
+
return `import { ${marked.join(', ')} } from 'express';`;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
@@ -133,17 +133,20 @@ export function advisoryBulkUrl(registry) {
|
|
|
133
133
|
* and the default is what pnpm itself would use.
|
|
134
134
|
*/
|
|
135
135
|
export function configuredRegistry(env = process.env) {
|
|
136
|
-
//
|
|
137
|
-
//
|
|
136
|
+
// The probe must ask the registry the AUDIT used, so it reads the variable the audit reads.
|
|
137
|
+
// Under pnpm 11 that is `pnpm_config_registry`; `npm_config_registry` is IGNORED by both
|
|
138
|
+
// `pnpm audit` and `pnpm config get registry` — measured 2026-10-06 with pnpm 11.14.0,
|
|
139
|
+
// re-measured 2026-10-09 with 11.28.5:
|
|
138
140
|
//
|
|
139
|
-
//
|
|
140
|
-
// npm_config_registry=http://127.0.0.1:9/
|
|
141
|
+
// pnpm_config_registry=http://127.0.0.1:9/ pnpm audit --json {"error": … "fetch failed"}
|
|
142
|
+
// npm_config_registry=http://127.0.0.1:9/ pnpm audit --json a normal report from npmjs.org
|
|
141
143
|
//
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
|
|
144
|
+
// The version before read `npm_config_registry`, from a measurement on 2026-09-04 with an older
|
|
145
|
+
// pnpm. Under pnpm 11 that sent the probe to a registry the audit never talked to: a stub there
|
|
146
|
+
// answered, the run concluded "no outage", and an unreachable audit registry read as clean.
|
|
147
|
+
// `pnpm config get registry` below would report `pnpm_config_registry` too; reading it here saves
|
|
148
|
+
// the spawn and keeps the answer independent of how a pnpm shim forwards the environment.
|
|
149
|
+
const fromEnv = env.pnpm_config_registry ?? env.PNPM_CONFIG_REGISTRY;
|
|
147
150
|
if (typeof fromEnv === 'string' && fromEnv.trim()) return fromEnv.trim();
|
|
148
151
|
|
|
149
152
|
try {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"commit": "
|
|
2
|
+
"commit": "a49b79d7a9be72b480ec658de48e909b76c9a45e",
|
|
3
3
|
"files": {
|
|
4
4
|
"build-test-gate.mjs": "865bf1b9dd28151f53b9f2dfe4c3c46d29b9303fb1c2f497ce0e3136bcd37d71",
|
|
5
|
-
"check.mjs": "
|
|
5
|
+
"check.mjs": "0a0377f79d7131c2ddc3705f59804461c12d08a928b35b945e996c31e29b4012",
|
|
6
6
|
"lib/ansi.mjs": "f997ee6e9bf1c7ee54ab612d4040fcc778064ec160eae19bf5c3960a75a6e2ff",
|
|
7
|
-
"lib/audit-report.mjs": "
|
|
7
|
+
"lib/audit-report.mjs": "d8c6fef1bf06d37f5737aaffa1eeb287ec03af608588ce845ba90f16cafac0b9",
|
|
8
8
|
"lib/workspace-packages.mjs": "ccdd133622a88186c924bc8271d35cf1f8357dc26d4a607998ca5e91fce5bf88"
|
|
9
9
|
},
|
|
10
|
-
"ref": "v3.
|
|
10
|
+
"ref": "v3.15.2",
|
|
11
11
|
"repository": "lenneTech/lt-monorepo",
|
|
12
|
-
"version": "3.
|
|
12
|
+
"version": "3.15.2"
|
|
13
13
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lenne.tech/cli",
|
|
3
|
-
"version": "1.50.
|
|
3
|
+
"version": "1.50.6",
|
|
4
4
|
"description": "lenne.Tech CLI: lt",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lenne.Tech",
|
|
@@ -58,13 +58,13 @@
|
|
|
58
58
|
"bin"
|
|
59
59
|
],
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@aws-sdk/client-s3": "3.
|
|
61
|
+
"@aws-sdk/client-s3": "3.1149.0",
|
|
62
62
|
"@lenne.tech/cli-plugin-helper": "0.0.14",
|
|
63
63
|
"axios": "1.20.0",
|
|
64
64
|
"bcrypt": "6.0.0",
|
|
65
65
|
"cross-spawn": "7.0.6",
|
|
66
|
-
"defuddle": "0.19.
|
|
67
|
-
"ejs": "
|
|
66
|
+
"defuddle": "0.19.5",
|
|
67
|
+
"ejs": "7.0.1",
|
|
68
68
|
"glob": "13.0.6",
|
|
69
69
|
"gluegun": "5.2.2",
|
|
70
70
|
"js-sha256": "1.0.0",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"jsonc-parser": "3.3.1",
|
|
74
74
|
"lodash": "4.18.1",
|
|
75
75
|
"open": "11.0.4",
|
|
76
|
-
"playwright-core": "1.
|
|
76
|
+
"playwright-core": "1.64.0",
|
|
77
77
|
"ts-morph": "28.0.0",
|
|
78
78
|
"ts-node": "10.9.2",
|
|
79
79
|
"turndown": "7.2.4",
|
|
@@ -94,14 +94,14 @@
|
|
|
94
94
|
"@types/jest": "30.0.0",
|
|
95
95
|
"@types/js-yaml": "4.0.9",
|
|
96
96
|
"@types/jsdom": "28.0.1",
|
|
97
|
-
"@types/lodash": "4.17.
|
|
98
|
-
"@types/node": "26.6.
|
|
97
|
+
"@types/lodash": "4.17.26",
|
|
98
|
+
"@types/node": "26.6.5",
|
|
99
99
|
"@types/turndown": "5.0.6",
|
|
100
100
|
"eslint": "10.12.0",
|
|
101
101
|
"husky": "9.1.7",
|
|
102
102
|
"jest": "30.5.2",
|
|
103
103
|
"minimatch": "10.2.6",
|
|
104
|
-
"prettier": "3.9.
|
|
104
|
+
"prettier": "3.9.10",
|
|
105
105
|
"rimraf": "6.1.3",
|
|
106
106
|
"ts-jest": "29.4.14"
|
|
107
107
|
},
|