@nexusts/cli 0.7.2 → 0.7.4
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/dist/core/index.d.ts +1 -0
- package/dist/core/version.d.ts +1 -0
- package/dist/index.js +197 -152
- package/dist/index.js.map +7 -6
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
9
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
|
+
for (let key of __getOwnPropNames(mod))
|
|
12
|
+
if (!__hasOwnProp.call(to, key))
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: () => mod[key],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
3
19
|
var __require = import.meta.require;
|
|
4
20
|
|
|
5
21
|
// packages/cli/src/commands/info.ts
|
|
6
|
-
import { resolve as
|
|
22
|
+
import { resolve as resolve4 } from "path";
|
|
7
23
|
|
|
8
24
|
// packages/cli/src/core/args.ts
|
|
9
25
|
var LONG_RE = /^--([^=]+)(?:=(.*))?$/;
|
|
@@ -477,6 +493,24 @@ function singularize(s) {
|
|
|
477
493
|
return s.slice(0, -1);
|
|
478
494
|
return s;
|
|
479
495
|
}
|
|
496
|
+
// packages/cli/src/core/version.ts
|
|
497
|
+
import { existsSync as existsSync3, readFileSync as readFileSync3 } from "fs";
|
|
498
|
+
import { resolve as resolve3, dirname as dirname2 } from "path";
|
|
499
|
+
import { fileURLToPath } from "url";
|
|
500
|
+
var __dirname2 = dirname2(fileURLToPath(import.meta.url));
|
|
501
|
+
var PKG_JSON = resolve3(__dirname2, "..", "package.json");
|
|
502
|
+
function loadVersion() {
|
|
503
|
+
try {
|
|
504
|
+
if (!existsSync3(PKG_JSON))
|
|
505
|
+
return "0.0.0";
|
|
506
|
+
const raw = readFileSync3(PKG_JSON, "utf-8");
|
|
507
|
+
const pkg = JSON.parse(raw);
|
|
508
|
+
return pkg.version ?? "0.0.0";
|
|
509
|
+
} catch {
|
|
510
|
+
return "0.0.0";
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
var VERSION = loadVersion();
|
|
480
514
|
// packages/cli/src/commands/info.ts
|
|
481
515
|
var infoCommand = {
|
|
482
516
|
name: "info",
|
|
@@ -528,7 +562,7 @@ var infoCommand = {
|
|
|
528
562
|
logger.blank();
|
|
529
563
|
logger.info(colors.bold("Working directory"));
|
|
530
564
|
logger.blank();
|
|
531
|
-
logger.info(` ${
|
|
565
|
+
logger.info(` ${resolve4(ctx.cwd)}`);
|
|
532
566
|
logger.blank();
|
|
533
567
|
return 0;
|
|
534
568
|
}
|
|
@@ -536,8 +570,8 @@ var infoCommand = {
|
|
|
536
570
|
var info_default = infoCommand;
|
|
537
571
|
|
|
538
572
|
// packages/cli/src/commands/init.ts
|
|
539
|
-
import { existsSync as
|
|
540
|
-
import { resolve as
|
|
573
|
+
import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync4, writeFileSync as writeFileSync2 } from "fs";
|
|
574
|
+
import { resolve as resolve5 } from "path";
|
|
541
575
|
|
|
542
576
|
// packages/cli/src/templates/controller/adonis.ts
|
|
543
577
|
var adonis_default = `
|
|
@@ -1165,8 +1199,8 @@ var initCommand = {
|
|
|
1165
1199
|
async run(ctx) {
|
|
1166
1200
|
const interactive = !flagBool(ctx.flags, "no-interaction", false);
|
|
1167
1201
|
const force = flagBool(ctx.flags, "force", false);
|
|
1168
|
-
const target =
|
|
1169
|
-
if (!
|
|
1202
|
+
const target = resolve5(ctx.cwd, ctx.flags["target"] ?? ".");
|
|
1203
|
+
if (!existsSync4(target)) {
|
|
1170
1204
|
logger.error(`Target directory does not exist: ${target}`);
|
|
1171
1205
|
logger.info(`Run \`nx new <name>\` to create a fresh project, or \`mkdir -p ${target}\` first.`);
|
|
1172
1206
|
return 1;
|
|
@@ -1209,14 +1243,14 @@ var initCommand = {
|
|
|
1209
1243
|
const created = [];
|
|
1210
1244
|
const skipped = [];
|
|
1211
1245
|
const merged = [];
|
|
1212
|
-
mkdirSync2(
|
|
1213
|
-
mkdirSync2(
|
|
1246
|
+
mkdirSync2(resolve5(target, "app/controllers"), { recursive: true });
|
|
1247
|
+
mkdirSync2(resolve5(target, "public"), { recursive: true });
|
|
1214
1248
|
if (view !== "none") {
|
|
1215
|
-
mkdirSync2(
|
|
1249
|
+
mkdirSync2(resolve5(target, "resources/views"), { recursive: true });
|
|
1216
1250
|
}
|
|
1217
1251
|
for (const entry of plan) {
|
|
1218
|
-
const abs =
|
|
1219
|
-
const exists =
|
|
1252
|
+
const abs = resolve5(target, entry.path);
|
|
1253
|
+
const exists = existsSync4(abs);
|
|
1220
1254
|
if (entry.mode === "merge-pkg") {
|
|
1221
1255
|
const coreDeps = {
|
|
1222
1256
|
"@nexusts/core": "*",
|
|
@@ -1474,7 +1508,7 @@ function defaultTsconfig() {
|
|
|
1474
1508
|
`;
|
|
1475
1509
|
}
|
|
1476
1510
|
function mergePackageJson(path, additions) {
|
|
1477
|
-
const raw =
|
|
1511
|
+
const raw = readFileSync4(path, "utf8");
|
|
1478
1512
|
const pkg = parseJsonLoose(raw);
|
|
1479
1513
|
let changed = false;
|
|
1480
1514
|
if (!pkg["type"]) {
|
|
@@ -1516,7 +1550,7 @@ function mergePackageJson(path, additions) {
|
|
|
1516
1550
|
}
|
|
1517
1551
|
}
|
|
1518
1552
|
function mergeTsconfig(path, additions) {
|
|
1519
|
-
const raw =
|
|
1553
|
+
const raw = readFileSync4(path, "utf8");
|
|
1520
1554
|
const cfg = parseJsonLoose(raw);
|
|
1521
1555
|
const co = cfg.compilerOptions ?? {};
|
|
1522
1556
|
let changed = false;
|
|
@@ -1545,7 +1579,7 @@ function mergeTsconfig(path, additions) {
|
|
|
1545
1579
|
var init_default = initCommand;
|
|
1546
1580
|
|
|
1547
1581
|
// packages/cli/src/commands/make-auth.ts
|
|
1548
|
-
import { resolve as
|
|
1582
|
+
import { resolve as resolve6 } from "path";
|
|
1549
1583
|
var AUTH_INSTANCE_TEMPLATE = `/**
|
|
1550
1584
|
* Better-auth instance \u2014 generated by \`nx make:auth\`.
|
|
1551
1585
|
*
|
|
@@ -1660,7 +1694,7 @@ var makeAuthCommand = {
|
|
|
1660
1694
|
passkeyRpId: rpId,
|
|
1661
1695
|
passkeyOrigin: Array.isArray(origin) ? origin.join(",") : origin
|
|
1662
1696
|
});
|
|
1663
|
-
const authOut =
|
|
1697
|
+
const authOut = resolve6(ctx.cwd, "app/auth/auth.ts");
|
|
1664
1698
|
if (writeFile(authOut, authCode)) {
|
|
1665
1699
|
logger.success(`created ${authOut}`);
|
|
1666
1700
|
} else {
|
|
@@ -1670,7 +1704,7 @@ var makeAuthCommand = {
|
|
|
1670
1704
|
providers: providers.length > 0,
|
|
1671
1705
|
entries
|
|
1672
1706
|
});
|
|
1673
|
-
const envOut =
|
|
1707
|
+
const envOut = resolve6(ctx.cwd, ".env.example");
|
|
1674
1708
|
if (writeFile(envOut, envCode, { skipIfExists: true })) {
|
|
1675
1709
|
logger.success(`created ${envOut}`);
|
|
1676
1710
|
} else {
|
|
@@ -1696,7 +1730,7 @@ var makeAuthCommand = {
|
|
|
1696
1730
|
var make_auth_default = makeAuthCommand;
|
|
1697
1731
|
|
|
1698
1732
|
// packages/cli/src/commands/make-controller.ts
|
|
1699
|
-
import { resolve as
|
|
1733
|
+
import { resolve as resolve7 } from "path";
|
|
1700
1734
|
var makeControllerCommand = {
|
|
1701
1735
|
name: "make:controller",
|
|
1702
1736
|
aliases: ["mc", "make-controller"],
|
|
@@ -1742,7 +1776,7 @@ var makeControllerCommand = {
|
|
|
1742
1776
|
service: serviceName,
|
|
1743
1777
|
serviceCamel
|
|
1744
1778
|
}).replace(/import .*\n/g, skipService ? (m) => m.includes("services/") ? "" : m : (m) => m);
|
|
1745
|
-
const out =
|
|
1779
|
+
const out = resolve7(ctx.cwd, ctx.config.paths.controllers, `${variants.kebab}.controller.ts`);
|
|
1746
1780
|
const ok = writeFile(out, code, { skipIfExists: false });
|
|
1747
1781
|
if (!ok) {
|
|
1748
1782
|
logger.error(`Refusing to overwrite existing file: ${out}`);
|
|
@@ -1757,7 +1791,7 @@ var make_controller_default = makeControllerCommand;
|
|
|
1757
1791
|
|
|
1758
1792
|
// packages/cli/src/commands/make-crud.ts
|
|
1759
1793
|
import { mkdirSync as mkdirSync3 } from "fs";
|
|
1760
|
-
import { dirname as
|
|
1794
|
+
import { dirname as dirname3, resolve as resolve8 } from "path";
|
|
1761
1795
|
|
|
1762
1796
|
// packages/cli/src/templates/model/drizzle-dialect.ts
|
|
1763
1797
|
function renderDrizzleDialect(dialect) {
|
|
@@ -1932,7 +1966,7 @@ var makeCrudCommand = {
|
|
|
1932
1966
|
viewShowComponent,
|
|
1933
1967
|
hasInertia
|
|
1934
1968
|
});
|
|
1935
|
-
const out =
|
|
1969
|
+
const out = resolve8(ctx.cwd, ctx.config.paths.controllers, `${variants.kebab}.controller.ts`);
|
|
1936
1970
|
if (!writeFile(out, code, { skipIfExists: true })) {
|
|
1937
1971
|
logger.warn(`skipped (exists): ${out}`);
|
|
1938
1972
|
} else {
|
|
@@ -1950,7 +1984,7 @@ var makeCrudCommand = {
|
|
|
1950
1984
|
repository,
|
|
1951
1985
|
repositoryCamel: variants.camel + "Repository"
|
|
1952
1986
|
});
|
|
1953
|
-
const out =
|
|
1987
|
+
const out = resolve8(ctx.cwd, ctx.config.paths.services, `${variants.kebab}.service.ts`);
|
|
1954
1988
|
if (!writeFile(out, code, { skipIfExists: true })) {
|
|
1955
1989
|
logger.warn(`skipped (exists): ${out}`);
|
|
1956
1990
|
} else {
|
|
@@ -1984,7 +2018,7 @@ var makeCrudCommand = {
|
|
|
1984
2018
|
prismaBlock: ""
|
|
1985
2019
|
});
|
|
1986
2020
|
}
|
|
1987
|
-
const out =
|
|
2021
|
+
const out = resolve8(ctx.cwd, ctx.config.paths.models, `${variants.kebab}.model.ts`);
|
|
1988
2022
|
if (!writeFile(out, code, { skipIfExists: true })) {
|
|
1989
2023
|
logger.warn(`skipped (exists): ${out}`);
|
|
1990
2024
|
} else {
|
|
@@ -2000,8 +2034,8 @@ var makeCrudCommand = {
|
|
|
2000
2034
|
tableName,
|
|
2001
2035
|
repository
|
|
2002
2036
|
});
|
|
2003
|
-
const repoOut =
|
|
2004
|
-
mkdirSync3(
|
|
2037
|
+
const repoOut = resolve8(ctx.cwd, `${ctx.config.paths.app}/repositories`, `${variants.kebab}.repository.ts`);
|
|
2038
|
+
mkdirSync3(dirname3(repoOut), { recursive: true });
|
|
2005
2039
|
if (!writeFile(repoOut, repoCode, { skipIfExists: true })) {
|
|
2006
2040
|
logger.warn(`skipped (exists): ${repoOut}`);
|
|
2007
2041
|
} else {
|
|
@@ -2015,7 +2049,7 @@ var makeCrudCommand = {
|
|
|
2015
2049
|
camel: variants.camel,
|
|
2016
2050
|
kebab: variants.kebab
|
|
2017
2051
|
});
|
|
2018
|
-
const out =
|
|
2052
|
+
const out = resolve8(ctx.cwd, ctx.config.paths.dto, `${variants.kebab}.dto.ts`);
|
|
2019
2053
|
if (!writeFile(out, code, { skipIfExists: true })) {
|
|
2020
2054
|
logger.warn(`skipped (exists): ${out}`);
|
|
2021
2055
|
} else {
|
|
@@ -2033,7 +2067,7 @@ var makeCrudCommand = {
|
|
|
2033
2067
|
repository,
|
|
2034
2068
|
hasRepo: !noRepo
|
|
2035
2069
|
});
|
|
2036
|
-
const out =
|
|
2070
|
+
const out = resolve8(ctx.cwd, ctx.config.paths.modules, `${variants.kebab}.module.ts`);
|
|
2037
2071
|
if (!writeFile(out, code, { skipIfExists: true })) {
|
|
2038
2072
|
logger.warn(`skipped (exists): ${out}`);
|
|
2039
2073
|
} else {
|
|
@@ -2049,7 +2083,7 @@ var makeCrudCommand = {
|
|
|
2049
2083
|
controller,
|
|
2050
2084
|
service
|
|
2051
2085
|
});
|
|
2052
|
-
const out =
|
|
2086
|
+
const out = resolve8(ctx.cwd, "tests", `${variants.kebab}.test.ts`);
|
|
2053
2087
|
if (!writeFile(out, code, { skipIfExists: true })) {
|
|
2054
2088
|
logger.warn(`skipped (exists): ${out}`);
|
|
2055
2089
|
} else {
|
|
@@ -2085,7 +2119,7 @@ function renderDrizzleColumns(dialect) {
|
|
|
2085
2119
|
var make_crud_default = makeCrudCommand;
|
|
2086
2120
|
|
|
2087
2121
|
// packages/cli/src/commands/make-listener.ts
|
|
2088
|
-
import { resolve as
|
|
2122
|
+
import { resolve as resolve9 } from "path";
|
|
2089
2123
|
var LISTENER_TEMPLATE = `
|
|
2090
2124
|
import { Inject, Injectable } from '@nexusts/core';
|
|
2091
2125
|
import { EventService, OnEvent } from '@nexusts/events';
|
|
@@ -2136,7 +2170,7 @@ var makeListenerCommand = {
|
|
|
2136
2170
|
name: variants.pascal,
|
|
2137
2171
|
kebab: variants.kebab
|
|
2138
2172
|
});
|
|
2139
|
-
const out =
|
|
2173
|
+
const out = resolve9(ctx.cwd, "app/events/listeners", `${variants.kebab}.listener.ts`);
|
|
2140
2174
|
if (writeFile(out, code, { skipIfExists: true })) {
|
|
2141
2175
|
logger.success(`created ${out}`);
|
|
2142
2176
|
} else {
|
|
@@ -2156,7 +2190,7 @@ var makeListenerCommand = {
|
|
|
2156
2190
|
var make_listener_default = makeListenerCommand;
|
|
2157
2191
|
|
|
2158
2192
|
// packages/cli/src/commands/make-middleware.ts
|
|
2159
|
-
import { resolve as
|
|
2193
|
+
import { resolve as resolve10 } from "path";
|
|
2160
2194
|
var makeMiddlewareCommand = {
|
|
2161
2195
|
name: "make:middleware",
|
|
2162
2196
|
aliases: ["mwm", "make-middleware"],
|
|
@@ -2173,7 +2207,7 @@ var makeMiddlewareCommand = {
|
|
|
2173
2207
|
const code = render(templates.middleware, {
|
|
2174
2208
|
name: variants.pascal
|
|
2175
2209
|
});
|
|
2176
|
-
const out =
|
|
2210
|
+
const out = resolve10(ctx.cwd, ctx.config.paths.middleware, `${variants.kebab}.middleware.ts`);
|
|
2177
2211
|
writeFile(out, code);
|
|
2178
2212
|
logger.success(`created ${out}`);
|
|
2179
2213
|
logger.finger(`register with: app.server.app.use('*', new ${variants.pascal}Middleware().handle)`);
|
|
@@ -2183,7 +2217,7 @@ var makeMiddlewareCommand = {
|
|
|
2183
2217
|
var make_middleware_default = makeMiddlewareCommand;
|
|
2184
2218
|
|
|
2185
2219
|
// packages/cli/src/commands/make-migration.ts
|
|
2186
|
-
import { resolve as
|
|
2220
|
+
import { resolve as resolve11 } from "path";
|
|
2187
2221
|
var makeMigrationCommand = {
|
|
2188
2222
|
name: "make:migration",
|
|
2189
2223
|
aliases: ["mkm", "make-migration"],
|
|
@@ -2255,7 +2289,7 @@ var makeMigrationCommand = {
|
|
|
2255
2289
|
return 1;
|
|
2256
2290
|
}
|
|
2257
2291
|
const filename = `${formatTimestamp(new Date)}_${variants.snake}.${extension}`;
|
|
2258
|
-
const out =
|
|
2292
|
+
const out = resolve11(ctx.cwd, ctx.config.paths.migrations, filename);
|
|
2259
2293
|
writeFile(out, code);
|
|
2260
2294
|
logger.success(`created ${out}`);
|
|
2261
2295
|
if (isDrizzle) {
|
|
@@ -2343,7 +2377,7 @@ function formatTimestamp(d) {
|
|
|
2343
2377
|
var make_migration_default = makeMigrationCommand;
|
|
2344
2378
|
|
|
2345
2379
|
// packages/cli/src/commands/make-model.ts
|
|
2346
|
-
import { resolve as
|
|
2380
|
+
import { resolve as resolve12 } from "path";
|
|
2347
2381
|
var makeModelCommand = {
|
|
2348
2382
|
name: "make:model",
|
|
2349
2383
|
aliases: ["mmodel", "make-model"],
|
|
@@ -2415,7 +2449,7 @@ var makeModelCommand = {
|
|
|
2415
2449
|
prismaBlock
|
|
2416
2450
|
});
|
|
2417
2451
|
}
|
|
2418
|
-
const out =
|
|
2452
|
+
const out = resolve12(ctx.cwd, ctx.config.paths.models, `${variants.kebab}.model.ts`);
|
|
2419
2453
|
writeFile(out, code);
|
|
2420
2454
|
logger.success(`created ${out}`);
|
|
2421
2455
|
logger.finger(`run \`nx make:migration create_${tableName}_table\` to scaffold a migration.`);
|
|
@@ -2474,7 +2508,7 @@ function capitalize(s) {
|
|
|
2474
2508
|
var make_model_default = makeModelCommand;
|
|
2475
2509
|
|
|
2476
2510
|
// packages/cli/src/commands/make-module.ts
|
|
2477
|
-
import { resolve as
|
|
2511
|
+
import { resolve as resolve13 } from "path";
|
|
2478
2512
|
var makeModuleCommand = {
|
|
2479
2513
|
name: "make:module",
|
|
2480
2514
|
aliases: ["mm", "make-module"],
|
|
@@ -2508,7 +2542,7 @@ var makeModuleCommand = {
|
|
|
2508
2542
|
hasService,
|
|
2509
2543
|
hasRepo
|
|
2510
2544
|
});
|
|
2511
|
-
const out =
|
|
2545
|
+
const out = resolve13(ctx.cwd, ctx.config.paths.modules, `${variants.kebab}.module.ts`);
|
|
2512
2546
|
writeFile(out, code);
|
|
2513
2547
|
logger.success(`created ${out}`);
|
|
2514
2548
|
logger.finger(`add ${variants.pascal}Module to AppModule.imports.`);
|
|
@@ -2518,7 +2552,7 @@ var makeModuleCommand = {
|
|
|
2518
2552
|
var make_module_default = makeModuleCommand;
|
|
2519
2553
|
|
|
2520
2554
|
// packages/cli/src/commands/make-queue.ts
|
|
2521
|
-
import { resolve as
|
|
2555
|
+
import { resolve as resolve14 } from "path";
|
|
2522
2556
|
var WORKER_TEMPLATE = `
|
|
2523
2557
|
import { Inject, Injectable } from '@nexusts/core';
|
|
2524
2558
|
import { QueueService, OnQueueReady } from '@nexusts/queue';
|
|
@@ -2646,7 +2680,7 @@ var makeQueueCommand = {
|
|
|
2646
2680
|
name: variants.pascal,
|
|
2647
2681
|
kebab: variants.kebab
|
|
2648
2682
|
});
|
|
2649
|
-
const out =
|
|
2683
|
+
const out = resolve14(ctx.cwd, "app/queue/workers", `${variants.kebab}.worker.ts`);
|
|
2650
2684
|
if (writeFile(out, code, { skipIfExists: true })) {
|
|
2651
2685
|
logger.success(`created ${out}`);
|
|
2652
2686
|
} else {
|
|
@@ -2658,7 +2692,7 @@ var makeQueueCommand = {
|
|
|
2658
2692
|
name: variants.pascal,
|
|
2659
2693
|
kebab: variants.kebab
|
|
2660
2694
|
});
|
|
2661
|
-
const out =
|
|
2695
|
+
const out = resolve14(ctx.cwd, "app/queue/jobs", `${variants.kebab}.job.ts`);
|
|
2662
2696
|
if (writeFile(out, code, { skipIfExists: true })) {
|
|
2663
2697
|
logger.success(`created ${out}`);
|
|
2664
2698
|
} else {
|
|
@@ -2681,27 +2715,25 @@ var makeQueueCommand = {
|
|
|
2681
2715
|
var make_queue_default = makeQueueCommand;
|
|
2682
2716
|
|
|
2683
2717
|
// packages/cli/src/commands/make-schedule.ts
|
|
2684
|
-
import { resolve as
|
|
2718
|
+
import { resolve as resolve15 } from "path";
|
|
2685
2719
|
var TASK_TEMPLATE = `
|
|
2686
|
-
import {
|
|
2687
|
-
import { Cron, Interval, Timeout
|
|
2720
|
+
import { Injectable } from '@nexusts/core';
|
|
2721
|
+
import { Cron, Interval, Timeout } from '@nexusts/schedule';
|
|
2688
2722
|
|
|
2689
2723
|
/**
|
|
2690
2724
|
* {{ name }} task \u2014 generated by \`nx make:schedule {{ name }}\`.
|
|
2691
2725
|
*
|
|
2692
|
-
* Mark methods with \`@Cron\`, \`@Interval\`, or \`@Timeout
|
|
2693
|
-
*
|
|
2726
|
+
* Mark methods with \`@Cron\`, \`@Interval\`, or \`@Timeout\`.
|
|
2727
|
+
* Auto-detected at boot \u2014 no manual registration needed.
|
|
2694
2728
|
*/
|
|
2695
2729
|
@Injectable()
|
|
2696
2730
|
export class {{ name }}Task {
|
|
2697
|
-
constructor(
|
|
2731
|
+
constructor() {}
|
|
2698
2732
|
|
|
2699
2733
|
// TODO: add @Cron, @Interval, or @Timeout handlers below.
|
|
2700
2734
|
|
|
2701
2735
|
// @Cron('0 * * * *') // every hour
|
|
2702
|
-
// async hourly() {
|
|
2703
|
-
// this.schedule; // unused \u2014 remove if you don't need it
|
|
2704
|
-
// }
|
|
2736
|
+
// async hourly() { /* ... */ }
|
|
2705
2737
|
|
|
2706
2738
|
// @Interval(60_000) // every minute
|
|
2707
2739
|
// async tick() { /* ... */ }
|
|
@@ -2709,16 +2741,6 @@ export class {{ name }}Task {
|
|
|
2709
2741
|
// @Timeout(5_000) // 5s after boot
|
|
2710
2742
|
// async startup() { /* ... */ }
|
|
2711
2743
|
}
|
|
2712
|
-
|
|
2713
|
-
import { scanForSchedulers } from '@nexusts/schedule';
|
|
2714
|
-
|
|
2715
|
-
/**
|
|
2716
|
-
* Bootstrap helper \u2014 call from main.ts to register every @Cron /
|
|
2717
|
-
* @Interval / @Timeout handler on this task class.
|
|
2718
|
-
*/
|
|
2719
|
-
export async function register{{ name }}(task: {{ name }}Task, schedule: ScheduleService) {
|
|
2720
|
-
return scanForSchedulers(task, schedule);
|
|
2721
|
-
}
|
|
2722
2744
|
`.trimStart();
|
|
2723
2745
|
var makeScheduleCommand = {
|
|
2724
2746
|
name: "make:schedule",
|
|
@@ -2737,7 +2759,7 @@ var makeScheduleCommand = {
|
|
|
2737
2759
|
name: variants.pascal,
|
|
2738
2760
|
kebab: variants.kebab
|
|
2739
2761
|
});
|
|
2740
|
-
const out =
|
|
2762
|
+
const out = resolve15(ctx.cwd, "app/schedule/tasks", `${variants.kebab}.task.ts`);
|
|
2741
2763
|
if (writeFile(out, code, { skipIfExists: true })) {
|
|
2742
2764
|
logger.success(`created ${out}`);
|
|
2743
2765
|
} else {
|
|
@@ -2746,9 +2768,8 @@ var makeScheduleCommand = {
|
|
|
2746
2768
|
logger.blank();
|
|
2747
2769
|
logger.heading("Next steps");
|
|
2748
2770
|
logger.info("1. Add @Cron / @Interval / @Timeout handlers to the class.");
|
|
2749
|
-
logger.info(
|
|
2750
|
-
logger.info(
|
|
2751
|
-
logger.info(`3. Don't forget to call \`schedule.start()\` to begin the tick.`);
|
|
2771
|
+
logger.info("2. Add the task class to your module's providers array.");
|
|
2772
|
+
logger.info(" \u2192 Auto-detected at boot, no main.ts changes needed.");
|
|
2752
2773
|
logger.blank();
|
|
2753
2774
|
return 0;
|
|
2754
2775
|
}
|
|
@@ -2756,7 +2777,7 @@ var makeScheduleCommand = {
|
|
|
2756
2777
|
var make_schedule_default = makeScheduleCommand;
|
|
2757
2778
|
|
|
2758
2779
|
// packages/cli/src/commands/make-service.ts
|
|
2759
|
-
import { resolve as
|
|
2780
|
+
import { resolve as resolve16 } from "path";
|
|
2760
2781
|
var makeServiceCommand = {
|
|
2761
2782
|
name: "make:service",
|
|
2762
2783
|
aliases: ["ms", "make-service"],
|
|
@@ -2787,7 +2808,7 @@ var makeServiceCommand = {
|
|
|
2787
2808
|
repository,
|
|
2788
2809
|
repositoryCamel
|
|
2789
2810
|
});
|
|
2790
|
-
const out =
|
|
2811
|
+
const out = resolve16(ctx.cwd, ctx.config.paths.services, `${variants.kebab}.service.ts`);
|
|
2791
2812
|
writeFile(out, code);
|
|
2792
2813
|
logger.success(`created ${out}`);
|
|
2793
2814
|
return 0;
|
|
@@ -2796,7 +2817,7 @@ var makeServiceCommand = {
|
|
|
2796
2817
|
var make_service_default = makeServiceCommand;
|
|
2797
2818
|
|
|
2798
2819
|
// packages/cli/src/commands/make-session.ts
|
|
2799
|
-
import { resolve as
|
|
2820
|
+
import { resolve as resolve17 } from "path";
|
|
2800
2821
|
var SESSION_TEMPLATE = `
|
|
2801
2822
|
import { Inject, Injectable } from '@nexusts/core';
|
|
2802
2823
|
import { SessionService } from '@nexusts/session';
|
|
@@ -2858,7 +2879,7 @@ var makeSessionCommand = {
|
|
|
2858
2879
|
name: variants.pascal,
|
|
2859
2880
|
kebab: variants.kebab
|
|
2860
2881
|
});
|
|
2861
|
-
const out =
|
|
2882
|
+
const out = resolve17(ctx.cwd, "app/session/services", `${variants.kebab}.session.ts`);
|
|
2862
2883
|
if (writeFile(out, code, { skipIfExists: true })) {
|
|
2863
2884
|
logger.success(`created ${out}`);
|
|
2864
2885
|
} else {
|
|
@@ -2876,7 +2897,7 @@ var makeSessionCommand = {
|
|
|
2876
2897
|
var make_session_default = makeSessionCommand;
|
|
2877
2898
|
|
|
2878
2899
|
// packages/cli/src/commands/make-validator.ts
|
|
2879
|
-
import { resolve as
|
|
2900
|
+
import { resolve as resolve18 } from "path";
|
|
2880
2901
|
var makeValidatorCommand = {
|
|
2881
2902
|
name: "make:validator",
|
|
2882
2903
|
aliases: ["mv", "make-validator"],
|
|
@@ -2893,7 +2914,7 @@ var makeValidatorCommand = {
|
|
|
2893
2914
|
const code = render(templates.validator, {
|
|
2894
2915
|
name: variants.pascal
|
|
2895
2916
|
});
|
|
2896
|
-
const out =
|
|
2917
|
+
const out = resolve18(ctx.cwd, ctx.config.paths.dto, `${variants.kebab}.dto.ts`);
|
|
2897
2918
|
writeFile(out, code);
|
|
2898
2919
|
logger.success(`created ${out}`);
|
|
2899
2920
|
return 0;
|
|
@@ -2903,8 +2924,8 @@ var make_validator_default = makeValidatorCommand;
|
|
|
2903
2924
|
|
|
2904
2925
|
// packages/cli/src/commands/db-migrate.ts
|
|
2905
2926
|
import { spawn } from "child_process";
|
|
2906
|
-
import { existsSync as
|
|
2907
|
-
import { resolve as
|
|
2927
|
+
import { existsSync as existsSync5 } from "fs";
|
|
2928
|
+
import { resolve as resolve19 } from "path";
|
|
2908
2929
|
var dbMigrateCommand = {
|
|
2909
2930
|
name: "db:migrate",
|
|
2910
2931
|
aliases: ["db:m", "migrate"],
|
|
@@ -2939,15 +2960,15 @@ var dbMigrateCommand = {
|
|
|
2939
2960
|
}
|
|
2940
2961
|
],
|
|
2941
2962
|
async run(ctx) {
|
|
2942
|
-
const folder = ctx.flags["folder"] ??
|
|
2963
|
+
const folder = ctx.flags["folder"] ?? resolve19(ctx.cwd, ctx.config.paths.migrations);
|
|
2943
2964
|
const dialect = ctx.flags["dialect"] ?? ctx.config.dialect ?? "bun-sqlite";
|
|
2944
|
-
const configPath = ctx.flags["config"] ??
|
|
2965
|
+
const configPath = ctx.flags["config"] ?? resolve19(ctx.cwd, "drizzle.config.ts");
|
|
2945
2966
|
const wantStatus = Boolean(ctx.flags["status"]);
|
|
2946
2967
|
const generateName = ctx.flags["generate"];
|
|
2947
2968
|
if (generateName) {
|
|
2948
2969
|
return runDrizzleKit(ctx.cwd, [
|
|
2949
2970
|
"generate",
|
|
2950
|
-
...
|
|
2971
|
+
...existsSync5(configPath) ? [`--config=${configPath}`] : [],
|
|
2951
2972
|
"--name",
|
|
2952
2973
|
generateName
|
|
2953
2974
|
]);
|
|
@@ -2957,7 +2978,7 @@ var dbMigrateCommand = {
|
|
|
2957
2978
|
}
|
|
2958
2979
|
return runDrizzleKit(ctx.cwd, [
|
|
2959
2980
|
"migrate",
|
|
2960
|
-
...
|
|
2981
|
+
...existsSync5(configPath) ? [`--config=${configPath}`] : []
|
|
2961
2982
|
]);
|
|
2962
2983
|
}
|
|
2963
2984
|
};
|
|
@@ -2978,7 +2999,7 @@ function runDrizzleKit(cwd, args2) {
|
|
|
2978
2999
|
});
|
|
2979
3000
|
}
|
|
2980
3001
|
async function runStatus(cwd, folder, dialect, configUrl = "") {
|
|
2981
|
-
if (!
|
|
3002
|
+
if (!existsSync5(folder)) {
|
|
2982
3003
|
logger.warn(`migrations folder not found: ${folder}`);
|
|
2983
3004
|
return 0;
|
|
2984
3005
|
}
|
|
@@ -3002,7 +3023,7 @@ const applied = await svc.appliedMigrations();
|
|
|
3002
3023
|
console.log(JSON.stringify({ total: applied.length, applied }, null, 2));
|
|
3003
3024
|
await svc.close();
|
|
3004
3025
|
`;
|
|
3005
|
-
const tmpFile =
|
|
3026
|
+
const tmpFile = resolve19(cwd, ".nx-migrate-status.mjs");
|
|
3006
3027
|
await import("fs/promises").then((m) => m.writeFile(tmpFile, script, "utf-8"));
|
|
3007
3028
|
try {
|
|
3008
3029
|
const code = await new Promise((resP) => {
|
|
@@ -3026,7 +3047,7 @@ function readEnvUrl(dialect) {
|
|
|
3026
3047
|
var db_migrate_default = dbMigrateCommand;
|
|
3027
3048
|
|
|
3028
3049
|
// packages/cli/src/commands/db-generate.ts
|
|
3029
|
-
import { resolve as
|
|
3050
|
+
import { resolve as resolve20 } from "path";
|
|
3030
3051
|
var dbGenerateCommand = {
|
|
3031
3052
|
name: "db:generate",
|
|
3032
3053
|
aliases: ["db:g", "db-generate", "generate-migration"],
|
|
@@ -3059,7 +3080,7 @@ var dbGenerateCommand = {
|
|
|
3059
3080
|
logger.info(`Generating raw SQL migration: ${name} (dialect=${dialect})`);
|
|
3060
3081
|
return runSqlTemplate(ctx.cwd, name, dialect);
|
|
3061
3082
|
}
|
|
3062
|
-
const configPath =
|
|
3083
|
+
const configPath = resolve20(ctx.cwd, "drizzle.config.ts");
|
|
3063
3084
|
const args2 = ["generate", "--config", configPath];
|
|
3064
3085
|
if (name)
|
|
3065
3086
|
args2.push("--name", name);
|
|
@@ -3093,9 +3114,9 @@ var db_generate_default = dbGenerateCommand;
|
|
|
3093
3114
|
|
|
3094
3115
|
// packages/cli/src/commands/db-seed.ts
|
|
3095
3116
|
import { spawn as spawn2 } from "child_process";
|
|
3096
|
-
import { existsSync as
|
|
3117
|
+
import { existsSync as existsSync6 } from "fs";
|
|
3097
3118
|
import { mkdir, readdir, writeFile as writeFile2, unlink } from "fs/promises";
|
|
3098
|
-
import { resolve as
|
|
3119
|
+
import { resolve as resolve21 } from "path";
|
|
3099
3120
|
var SEED_TEMPLATE = `/**
|
|
3100
3121
|
* Seed: {name}
|
|
3101
3122
|
*
|
|
@@ -3156,7 +3177,7 @@ var dbSeedCommand = {
|
|
|
3156
3177
|
}
|
|
3157
3178
|
],
|
|
3158
3179
|
async run(ctx) {
|
|
3159
|
-
const folder =
|
|
3180
|
+
const folder = resolve21(ctx.cwd, ctx.flags["folder"] ?? ctx.config.paths?.seeds ?? "db/seeds");
|
|
3160
3181
|
const dialect = ctx.flags["dialect"] ?? ctx.config.dialect ?? "bun-sqlite";
|
|
3161
3182
|
const createName = ctx.flags["create"];
|
|
3162
3183
|
const fileName = ctx.flags["file"];
|
|
@@ -3164,10 +3185,10 @@ var dbSeedCommand = {
|
|
|
3164
3185
|
if (createName) {
|
|
3165
3186
|
return await createSeedFile(folder, createName);
|
|
3166
3187
|
}
|
|
3167
|
-
if (!
|
|
3188
|
+
if (!existsSync6(folder)) {
|
|
3168
3189
|
logger.info(`creating empty seeds folder at ${folder}`);
|
|
3169
3190
|
await mkdir(folder, { recursive: true });
|
|
3170
|
-
await writeFile2(
|
|
3191
|
+
await writeFile2(resolve21(folder, "_README.ts"), `// Seed files go here. Run with: nx db:seed
|
|
3171
3192
|
`, "utf-8");
|
|
3172
3193
|
return 0;
|
|
3173
3194
|
}
|
|
@@ -3191,7 +3212,7 @@ var dbSeedCommand = {
|
|
|
3191
3212
|
if (reset) {
|
|
3192
3213
|
logger.warn("--reset is set: truncating every table in the schema before running seeds.");
|
|
3193
3214
|
}
|
|
3194
|
-
const seedImports = target.map((f, i) => `import seed_${i} from ${JSON.stringify(
|
|
3215
|
+
const seedImports = target.map((f, i) => `import seed_${i} from ${JSON.stringify(resolve21(folder, f))};`).join(`
|
|
3195
3216
|
`);
|
|
3196
3217
|
const seedCalls = target.map((_, i) => ` await seed_${i}({ db, logger, dialect, truncate: (t) => db.truncate(t) });`).join(`
|
|
3197
3218
|
`);
|
|
@@ -3224,7 +3245,7 @@ ${seedCalls}
|
|
|
3224
3245
|
await db.close();
|
|
3225
3246
|
logger.info(\`Seeds complete (\${${target.length}} file(s))\`);
|
|
3226
3247
|
`;
|
|
3227
|
-
const tmpFile =
|
|
3248
|
+
const tmpFile = resolve21(ctx.cwd, ".nx-db-seed.mjs");
|
|
3228
3249
|
await writeFile2(tmpFile, script, "utf-8");
|
|
3229
3250
|
try {
|
|
3230
3251
|
const code = await new Promise((resP) => {
|
|
@@ -3262,15 +3283,15 @@ async function createSeedFile(folder, name) {
|
|
|
3262
3283
|
logger.error(`invalid seed name "${name}" \u2014 use letters, numbers, dash, underscore.`);
|
|
3263
3284
|
return 1;
|
|
3264
3285
|
}
|
|
3265
|
-
if (!
|
|
3286
|
+
if (!existsSync6(folder))
|
|
3266
3287
|
await mkdir(folder, { recursive: true });
|
|
3267
3288
|
let candidate = `${name}.ts`;
|
|
3268
3289
|
let i = 1;
|
|
3269
|
-
while (
|
|
3290
|
+
while (existsSync6(resolve21(folder, candidate))) {
|
|
3270
3291
|
candidate = `${name}_${i}.ts`;
|
|
3271
3292
|
i++;
|
|
3272
3293
|
}
|
|
3273
|
-
const path =
|
|
3294
|
+
const path = resolve21(folder, candidate);
|
|
3274
3295
|
const body = SEED_TEMPLATE.replace(/\{name\}/g, name);
|
|
3275
3296
|
await writeFile2(path, body, "utf-8");
|
|
3276
3297
|
logger.info(`created ${path}`);
|
|
@@ -3281,7 +3302,7 @@ function readEnvUrl2(dialect) {
|
|
|
3281
3302
|
return url ?? null;
|
|
3282
3303
|
}
|
|
3283
3304
|
function relativeImport(cwd, target) {
|
|
3284
|
-
const abs =
|
|
3305
|
+
const abs = resolve21(cwd, target);
|
|
3285
3306
|
let rel = abs;
|
|
3286
3307
|
if (rel.startsWith(cwd))
|
|
3287
3308
|
rel = rel.slice(cwd.length);
|
|
@@ -3294,8 +3315,8 @@ function relativeImport(cwd, target) {
|
|
|
3294
3315
|
var db_seed_default = dbSeedCommand;
|
|
3295
3316
|
|
|
3296
3317
|
// packages/cli/src/commands/new.ts
|
|
3297
|
-
import { existsSync as
|
|
3298
|
-
import { resolve as
|
|
3318
|
+
import { existsSync as existsSync7, mkdirSync as mkdirSync4, writeFileSync as writeFileSync3 } from "fs";
|
|
3319
|
+
import { resolve as resolve22 } from "path";
|
|
3299
3320
|
var newCommand = {
|
|
3300
3321
|
name: "new",
|
|
3301
3322
|
aliases: ["n"],
|
|
@@ -3330,8 +3351,8 @@ var newCommand = {
|
|
|
3330
3351
|
return 1;
|
|
3331
3352
|
}
|
|
3332
3353
|
const interactive = !flagBool(ctx.flags, "no-interaction", false);
|
|
3333
|
-
const target =
|
|
3334
|
-
if (
|
|
3354
|
+
const target = resolve22(ctx.cwd, name);
|
|
3355
|
+
if (existsSync7(target)) {
|
|
3335
3356
|
logger.error(`Directory already exists: ${target}`);
|
|
3336
3357
|
return 1;
|
|
3337
3358
|
}
|
|
@@ -3356,21 +3377,21 @@ var newCommand = {
|
|
|
3356
3377
|
default: "react"
|
|
3357
3378
|
});
|
|
3358
3379
|
const ssr = !flagBool(ctx.flags, "no-ssr", false);
|
|
3359
|
-
mkdirSync4(
|
|
3380
|
+
mkdirSync4(resolve22(target, "app"), { recursive: true });
|
|
3360
3381
|
if (view !== "none") {
|
|
3361
|
-
mkdirSync4(
|
|
3382
|
+
mkdirSync4(resolve22(target, "resources/views"), { recursive: true });
|
|
3362
3383
|
}
|
|
3363
|
-
mkdirSync4(
|
|
3364
|
-
writeFileSync3(
|
|
3384
|
+
mkdirSync4(resolve22(target, "public"), { recursive: true });
|
|
3385
|
+
writeFileSync3(resolve22(target, "public/.gitkeep"), "");
|
|
3365
3386
|
if (view !== "none") {
|
|
3366
|
-
writeFileSync3(
|
|
3387
|
+
writeFileSync3(resolve22(target, "resources/views/welcome.html"), `<h1>Welcome to ${name}</h1>
|
|
3367
3388
|
<p>This is a sample Rendu template.</p>
|
|
3368
3389
|
<p>Founded <?= year ?>.</p>
|
|
3369
3390
|
`);
|
|
3370
3391
|
}
|
|
3371
|
-
writeFileSync3(
|
|
3372
|
-
writeFileSync3(
|
|
3373
|
-
writeFileSync3(
|
|
3392
|
+
writeFileSync3(resolve22(target, ".env"), generateEnvFile());
|
|
3393
|
+
writeFileSync3(resolve22(target, ".env.local"), generateEnvLocalFile());
|
|
3394
|
+
writeFileSync3(resolve22(target, ".gitignore"), generateGitIgnore());
|
|
3374
3395
|
const code = render(templates.project["nx.config.ts"], {
|
|
3375
3396
|
routing,
|
|
3376
3397
|
view,
|
|
@@ -3382,7 +3403,7 @@ var newCommand = {
|
|
|
3382
3403
|
inertiaSSR: ssr,
|
|
3383
3404
|
inertiaVersion: "1.0.0"
|
|
3384
3405
|
});
|
|
3385
|
-
writeFileSync3(
|
|
3406
|
+
writeFileSync3(resolve22(target, "nx.config.ts"), code);
|
|
3386
3407
|
const deps = {
|
|
3387
3408
|
"@nexusts/core": "*",
|
|
3388
3409
|
"reflect-metadata": "^0.2.2",
|
|
@@ -3396,7 +3417,7 @@ var newCommand = {
|
|
|
3396
3417
|
if (view !== "none") {
|
|
3397
3418
|
deps["@nexusts/static"] = "*";
|
|
3398
3419
|
}
|
|
3399
|
-
writeFileSync3(
|
|
3420
|
+
writeFileSync3(resolve22(target, "package.json"), JSON.stringify({
|
|
3400
3421
|
name,
|
|
3401
3422
|
version: "0.1.0",
|
|
3402
3423
|
type: "module",
|
|
@@ -3409,7 +3430,7 @@ var newCommand = {
|
|
|
3409
3430
|
},
|
|
3410
3431
|
dependencies: deps
|
|
3411
3432
|
}, null, 2));
|
|
3412
|
-
writeFileSync3(
|
|
3433
|
+
writeFileSync3(resolve22(target, "tsconfig.json"), `{
|
|
3413
3434
|
"compilerOptions": {
|
|
3414
3435
|
"target": "ES2022",
|
|
3415
3436
|
"module": "ESNext",
|
|
@@ -3430,7 +3451,7 @@ const staticMiddleware = StaticModule.mount({ root: './public', prefix: '/static
|
|
|
3430
3451
|
` : "";
|
|
3431
3452
|
const staticOption = hasView ? `
|
|
3432
3453
|
middleware: [staticMiddleware],` : "";
|
|
3433
|
-
writeFileSync3(
|
|
3454
|
+
writeFileSync3(resolve22(target, "app/main.ts"), `import 'reflect-metadata';
|
|
3434
3455
|
import { Application } from '@nexusts/core';
|
|
3435
3456
|
${staticImport}import { AppModule } from './app.module.js';
|
|
3436
3457
|
|
|
@@ -3450,7 +3471,7 @@ console.log('[nexus] Listening on http://localhost:' + (process.env['PORT'] ?? 3
|
|
|
3450
3471
|
connection: { filename: 'app.db' },
|
|
3451
3472
|
logging: true,
|
|
3452
3473
|
})` : "";
|
|
3453
|
-
writeFileSync3(
|
|
3474
|
+
writeFileSync3(resolve22(target, "app/app.module.ts"), `${ormImport}import { Module } from '@nexusts/core';
|
|
3454
3475
|
import { HomeController } from './controllers/home.controller.js';
|
|
3455
3476
|
|
|
3456
3477
|
@Module({
|
|
@@ -3461,12 +3482,12 @@ ${ormBlock},
|
|
|
3461
3482
|
})
|
|
3462
3483
|
export class AppModule {}
|
|
3463
3484
|
`);
|
|
3464
|
-
mkdirSync4(
|
|
3485
|
+
mkdirSync4(resolve22(target, "app/controllers"), { recursive: true });
|
|
3465
3486
|
const homeViewReturn = view !== "none" ? `{
|
|
3466
3487
|
view: 'welcome.html',
|
|
3467
3488
|
data: { year: new Date().getFullYear() },
|
|
3468
3489
|
}` : `{ status: 200, body: { message: 'Hello from NexusTS!' } }`;
|
|
3469
|
-
writeFileSync3(
|
|
3490
|
+
writeFileSync3(resolve22(target, "app/controllers/home.controller.ts"), `import { Controller, Get } from '@nexusts/core';
|
|
3470
3491
|
|
|
3471
3492
|
@Controller('/')
|
|
3472
3493
|
export class HomeController {
|
|
@@ -3476,7 +3497,7 @@ export class HomeController {
|
|
|
3476
3497
|
}
|
|
3477
3498
|
}
|
|
3478
3499
|
`);
|
|
3479
|
-
writeFileSync3(
|
|
3500
|
+
writeFileSync3(resolve22(target, "README.md"), `# ${name}
|
|
3480
3501
|
|
|
3481
3502
|
A new Nexus project.
|
|
3482
3503
|
|
|
@@ -3557,8 +3578,8 @@ dist/
|
|
|
3557
3578
|
var new_default = newCommand;
|
|
3558
3579
|
|
|
3559
3580
|
// packages/cli/src/commands/config.ts
|
|
3560
|
-
import { existsSync as
|
|
3561
|
-
import { resolve as
|
|
3581
|
+
import { existsSync as existsSync8, readFileSync as readFileSync5, writeFileSync as writeFileSync4 } from "fs";
|
|
3582
|
+
import { resolve as resolve23 } from "path";
|
|
3562
3583
|
var DEFAULT_VALUES = {
|
|
3563
3584
|
routing: "nest",
|
|
3564
3585
|
view: "rendu",
|
|
@@ -3572,9 +3593,9 @@ var DEFAULT_VALUES = {
|
|
|
3572
3593
|
};
|
|
3573
3594
|
function parseExistingConfig(path) {
|
|
3574
3595
|
const out = { ...DEFAULT_VALUES };
|
|
3575
|
-
if (!
|
|
3596
|
+
if (!existsSync8(path))
|
|
3576
3597
|
return out;
|
|
3577
|
-
const src =
|
|
3598
|
+
const src = readFileSync5(path, "utf8");
|
|
3578
3599
|
const grab = (re) => {
|
|
3579
3600
|
const m = src.match(re);
|
|
3580
3601
|
return m?.[1];
|
|
@@ -3673,12 +3694,12 @@ var configCommand = {
|
|
|
3673
3694
|
async run(ctx) {
|
|
3674
3695
|
const interactive = !flagBool(ctx.flags, "no-interaction", false);
|
|
3675
3696
|
const force = flagBool(ctx.flags, "force", false);
|
|
3676
|
-
const target =
|
|
3677
|
-
if (!
|
|
3697
|
+
const target = resolve23(ctx.cwd, ctx.flags["target"] ?? ".");
|
|
3698
|
+
if (!existsSync8(target)) {
|
|
3678
3699
|
logger.error(`Target directory does not exist: ${target}`);
|
|
3679
3700
|
return 1;
|
|
3680
3701
|
}
|
|
3681
|
-
const nxConfigPath =
|
|
3702
|
+
const nxConfigPath = resolve23(target, "nx.config.ts");
|
|
3682
3703
|
const values = parseExistingConfig(nxConfigPath);
|
|
3683
3704
|
const flag = (k) => ctx.flags[k];
|
|
3684
3705
|
const flagBoolStrict = (k, def) => flagBool(ctx.flags, k, def);
|
|
@@ -3702,7 +3723,7 @@ var configCommand = {
|
|
|
3702
3723
|
if (flagBoolStrict("no-ssr", false))
|
|
3703
3724
|
values.inertiaSSR = false;
|
|
3704
3725
|
const anyFlag = Object.values(ctx.flags).some((v) => v !== undefined && v !== false);
|
|
3705
|
-
if (interactive && !anyFlag && !
|
|
3726
|
+
if (interactive && !anyFlag && !existsSync8(nxConfigPath)) {
|
|
3706
3727
|
values.routing = await select("Routing style", ["nest", "adonis", "functional"], {
|
|
3707
3728
|
interactive,
|
|
3708
3729
|
default: values.routing
|
|
@@ -3721,7 +3742,7 @@ var configCommand = {
|
|
|
3721
3742
|
if (flag("db-url") === undefined && flag("db") !== undefined) {
|
|
3722
3743
|
values.dbUrl = defaultDbUrl(values.dbDriver);
|
|
3723
3744
|
}
|
|
3724
|
-
const existed =
|
|
3745
|
+
const existed = existsSync8(nxConfigPath);
|
|
3725
3746
|
if (existed && !force) {
|
|
3726
3747
|
if (anyFlag) {
|
|
3727
3748
|
writeNxConfig(target, values);
|
|
@@ -3733,18 +3754,18 @@ var configCommand = {
|
|
|
3733
3754
|
writeNxConfig(target, values);
|
|
3734
3755
|
logger.info(` + nx.config.ts`);
|
|
3735
3756
|
}
|
|
3736
|
-
const drizzleConfigPath =
|
|
3757
|
+
const drizzleConfigPath = resolve23(target, "drizzle.config.ts");
|
|
3737
3758
|
if (values.orm === "drizzle") {
|
|
3738
3759
|
const dialect = driverToDialect(values.dbDriver);
|
|
3739
3760
|
const dbUrl = values.dbUrl;
|
|
3740
|
-
const existedDrizzle =
|
|
3761
|
+
const existedDrizzle = existsSync8(drizzleConfigPath);
|
|
3741
3762
|
if (existedDrizzle && !force && !anyFlag) {
|
|
3742
3763
|
logger.info(` - drizzle.config.ts (unchanged; pass --force or a flag to update)`);
|
|
3743
3764
|
} else {
|
|
3744
3765
|
writeDrizzleConfig(target, { dialect, dbUrl });
|
|
3745
3766
|
logger.info(` ${existedDrizzle ? "~" : "+"} drizzle.config.ts`);
|
|
3746
3767
|
}
|
|
3747
|
-
} else if (
|
|
3768
|
+
} else if (existsSync8(drizzleConfigPath)) {
|
|
3748
3769
|
logger.info(` - drizzle.config.ts (left as-is; ORM is '${values.orm}', not 'drizzle')`);
|
|
3749
3770
|
}
|
|
3750
3771
|
logger.blank();
|
|
@@ -3761,29 +3782,43 @@ var configCommand = {
|
|
|
3761
3782
|
};
|
|
3762
3783
|
function writeNxConfig(target, values) {
|
|
3763
3784
|
const code = render(templates.project["nx.config.ts"], values);
|
|
3764
|
-
writeFileSync4(
|
|
3785
|
+
writeFileSync4(resolve23(target, "nx.config.ts"), code);
|
|
3765
3786
|
}
|
|
3766
3787
|
function writeDrizzleConfig(target, values) {
|
|
3767
3788
|
const code = render(templates.project["drizzle.config.ts"], values);
|
|
3768
|
-
writeFileSync4(
|
|
3789
|
+
writeFileSync4(resolve23(target, "drizzle.config.ts"), code);
|
|
3769
3790
|
}
|
|
3770
3791
|
var config_default = configCommand;
|
|
3771
3792
|
|
|
3772
3793
|
// packages/cli/src/commands/repl.ts
|
|
3773
3794
|
import {
|
|
3774
|
-
existsSync as
|
|
3795
|
+
existsSync as existsSync9,
|
|
3775
3796
|
mkdirSync as mkdirSync5,
|
|
3776
|
-
readFileSync as
|
|
3797
|
+
readFileSync as readFileSync6,
|
|
3777
3798
|
writeFileSync as writeFileSync5
|
|
3778
3799
|
} from "fs";
|
|
3779
|
-
import { dirname as
|
|
3800
|
+
import { dirname as dirname4, resolve as resolve24 } from "path";
|
|
3780
3801
|
import * as readline from "readline";
|
|
3781
3802
|
import * as vm from "vm";
|
|
3782
|
-
var BANNER =
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3803
|
+
var BANNER = (() => {
|
|
3804
|
+
const W = 49;
|
|
3805
|
+
const dash = "\u2500".repeat(W);
|
|
3806
|
+
const ver = `v${VERSION}`;
|
|
3807
|
+
const verLen = ver.length;
|
|
3808
|
+
const TITLE = "NexusTS REPL";
|
|
3809
|
+
const HINT = "Type .help for available commands";
|
|
3810
|
+
const titleGap = " ".repeat(W - 2 - TITLE.length - verLen - 1);
|
|
3811
|
+
const hintGap = " ".repeat(W - 2 - HINT.length);
|
|
3812
|
+
const L = (s) => `\u2502${s}\u2502`;
|
|
3813
|
+
return [
|
|
3814
|
+
`\u256D${dash}\u256E`,
|
|
3815
|
+
L(` ${TITLE}${titleGap}${ver} `),
|
|
3816
|
+
L(" ".repeat(W)),
|
|
3817
|
+
L(` ${HINT}${hintGap}`),
|
|
3818
|
+
`\u2570${dash}\u256F`
|
|
3819
|
+
].join(`
|
|
3820
|
+
`);
|
|
3821
|
+
})();
|
|
3787
3822
|
var HELP = `
|
|
3788
3823
|
Available commands:
|
|
3789
3824
|
.help Show this help
|
|
@@ -3810,11 +3845,11 @@ Examples:
|
|
|
3810
3845
|
> app.container.size
|
|
3811
3846
|
`;
|
|
3812
3847
|
var PRELOAD = [
|
|
3813
|
-
["db", "
|
|
3814
|
-
["logger", "
|
|
3815
|
-
["cfg", "
|
|
3816
|
-
["cache", "
|
|
3817
|
-
["events", "
|
|
3848
|
+
["db", "@nexusts/drizzle", "DrizzleService"],
|
|
3849
|
+
["logger", "@nexusts/logger", "Logger"],
|
|
3850
|
+
["cfg", "@nexusts/config", "ConfigService"],
|
|
3851
|
+
["cache", "@nexusts/cache", "CacheService"],
|
|
3852
|
+
["events", "@nexusts/events", "EventService"]
|
|
3818
3853
|
];
|
|
3819
3854
|
var replCommand = {
|
|
3820
3855
|
name: "repl",
|
|
@@ -3844,11 +3879,11 @@ var replCommand = {
|
|
|
3844
3879
|
async run(ctx) {
|
|
3845
3880
|
const mod = ctx.flags["module"];
|
|
3846
3881
|
const noBoot = Boolean(ctx.flags["no-boot"]);
|
|
3847
|
-
const histPath =
|
|
3882
|
+
const histPath = resolve24(ctx.cwd, ctx.flags["history"] ?? ".nx-repl-history");
|
|
3848
3883
|
const env = { console };
|
|
3849
3884
|
if (!noBoot) {
|
|
3850
|
-
const modPath =
|
|
3851
|
-
if (!
|
|
3885
|
+
const modPath = resolve24(ctx.cwd, mod ?? "app/app.module.ts");
|
|
3886
|
+
if (!existsSync9(modPath)) {
|
|
3852
3887
|
logger.error(`module not found: ${modPath}`);
|
|
3853
3888
|
logger.info("pass --module <path> or --no-boot to skip booting");
|
|
3854
3889
|
return 1;
|
|
@@ -4013,19 +4048,29 @@ async function preloadService(env, app, name, path, className) {
|
|
|
4013
4048
|
try {
|
|
4014
4049
|
const mod = await import(path);
|
|
4015
4050
|
const ServiceClass = mod[className];
|
|
4016
|
-
if (!ServiceClass)
|
|
4051
|
+
if (!ServiceClass) {
|
|
4052
|
+
logger.debug(`repl: ${className} not found in ${path}`);
|
|
4017
4053
|
return;
|
|
4054
|
+
}
|
|
4018
4055
|
const Token = ServiceClass.TOKEN ?? ServiceClass[`${className.toUpperCase()}_TOKEN`];
|
|
4019
|
-
if (!Token)
|
|
4056
|
+
if (!Token) {
|
|
4057
|
+
logger.debug(`repl: ${className}.TOKEN not found`);
|
|
4020
4058
|
return;
|
|
4059
|
+
}
|
|
4021
4060
|
try {
|
|
4022
4061
|
env[name] = app.container.resolve(Token);
|
|
4062
|
+
logger.debug(`repl: loaded ${name} (${className})`);
|
|
4023
4063
|
} catch {
|
|
4024
4064
|
try {
|
|
4025
4065
|
env[name] = app.container.resolve(ServiceClass);
|
|
4026
|
-
|
|
4066
|
+
logger.debug(`repl: loaded ${name} (${className}) via class`);
|
|
4067
|
+
} catch {
|
|
4068
|
+
logger.debug(`repl: ${name} (${className}) not registered in container`);
|
|
4069
|
+
}
|
|
4027
4070
|
}
|
|
4028
|
-
} catch {
|
|
4071
|
+
} catch {
|
|
4072
|
+
logger.debug(`repl: ${path} not installed \u2014 skipping ${name}`);
|
|
4073
|
+
}
|
|
4029
4074
|
}
|
|
4030
4075
|
function listServices(container) {
|
|
4031
4076
|
if (!container)
|
|
@@ -4118,10 +4163,10 @@ function formatError(e) {
|
|
|
4118
4163
|
`) : e.message;
|
|
4119
4164
|
}
|
|
4120
4165
|
function loadHistory(path) {
|
|
4121
|
-
if (!
|
|
4166
|
+
if (!existsSync9(path))
|
|
4122
4167
|
return [];
|
|
4123
4168
|
try {
|
|
4124
|
-
return
|
|
4169
|
+
return readFileSync6(path, "utf-8").split(`
|
|
4125
4170
|
`).filter(Boolean);
|
|
4126
4171
|
} catch {
|
|
4127
4172
|
return [];
|
|
@@ -4129,8 +4174,8 @@ function loadHistory(path) {
|
|
|
4129
4174
|
}
|
|
4130
4175
|
function saveHistoryFile(path, history) {
|
|
4131
4176
|
try {
|
|
4132
|
-
const dir =
|
|
4133
|
-
if (!
|
|
4177
|
+
const dir = dirname4(path);
|
|
4178
|
+
if (!existsSync9(dir))
|
|
4134
4179
|
mkdirSync5(dir, { recursive: true });
|
|
4135
4180
|
writeFileSync5(path, history.slice(-1000).join(`
|
|
4136
4181
|
`));
|
|
@@ -4140,7 +4185,7 @@ var repl_default = replCommand;
|
|
|
4140
4185
|
|
|
4141
4186
|
// packages/cli/src/commands/route-list.ts
|
|
4142
4187
|
import { readdirSync, statSync as statSync2 } from "fs";
|
|
4143
|
-
import { resolve as
|
|
4188
|
+
import { resolve as resolve25 } from "path";
|
|
4144
4189
|
var routeListCommand = {
|
|
4145
4190
|
name: "route:list",
|
|
4146
4191
|
aliases: ["routes", "route-list"],
|
|
@@ -4150,7 +4195,7 @@ var routeListCommand = {
|
|
|
4150
4195
|
{ name: "format", description: "Output format: table (default) | json" }
|
|
4151
4196
|
],
|
|
4152
4197
|
async run(ctx) {
|
|
4153
|
-
const controllersDir =
|
|
4198
|
+
const controllersDir = resolve25(ctx.cwd, ctx.config.paths.controllers);
|
|
4154
4199
|
try {
|
|
4155
4200
|
statSync2(controllersDir);
|
|
4156
4201
|
} catch {
|
|
@@ -4164,7 +4209,7 @@ var routeListCommand = {
|
|
|
4164
4209
|
}
|
|
4165
4210
|
const routes = [];
|
|
4166
4211
|
for (const file of files) {
|
|
4167
|
-
const fullPath =
|
|
4212
|
+
const fullPath = resolve25(controllersDir, file);
|
|
4168
4213
|
try {
|
|
4169
4214
|
const mod = await import(`${fullPath}?t=${Date.now()}`);
|
|
4170
4215
|
for (const exportName of Object.keys(mod)) {
|
|
@@ -4364,5 +4409,5 @@ main().then((code) => process.exit(code)).catch((err) => {
|
|
|
4364
4409
|
process.exit(1);
|
|
4365
4410
|
});
|
|
4366
4411
|
|
|
4367
|
-
//# debugId=
|
|
4412
|
+
//# debugId=9D68E94AB6C5D92664756E2164756E21
|
|
4368
4413
|
//# sourceMappingURL=index.js.map
|