@djangocfg/nextjs 2.1.483 → 2.1.484
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 +1 -2
- package/dist/config/index.d.mts +18 -0
- package/dist/config/index.mjs +35 -24
- package/dist/config/index.mjs.map +1 -1
- package/dist/health/index.d.mts +1 -1
- package/dist/health/index.mjs.map +1 -1
- package/dist/i18n/routing.d.mts +2 -2
- package/dist/index.mjs +35 -24
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
- package/src/config/createNextConfig.ts +9 -1
- package/src/config/utils/env.ts +59 -0
- package/src/health/route.ts +1 -2
package/dist/health/index.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/health/route.ts"],"sourcesContent":["/**\n * Health Route Handler for Next.js App Router\n *\n * Usage:\n * ```tsx\n * // app/
|
|
1
|
+
{"version":3,"sources":["../../src/health/route.ts"],"sourcesContent":["/**\n * Health Route Handler for Next.js App Router\n *\n * Usage:\n * ```tsx\n * // app/healthz/route.ts\n * import { createHealthHandler } from '@djangocfg/nextjs/health';\n *\n * export const GET = createHealthHandler({\n * version: process.env.NEXT_PUBLIC_APP_VERSION || '1.0.0',\n * checks: [\n * {\n * name: 'database',\n * check: async () => {\n * // Check database connection\n * return await checkDatabase();\n * },\n * },\n * ],\n * });\n * ```\n */\n\nimport { NextResponse } from 'next/server';\n\nimport type { HealthConfig, HealthResponse } from './types';\n\nexport function createHealthHandler(config: HealthConfig = {}) {\n const { version, checks = [], customData = {} } = config;\n\n return async function GET() {\n const startTime = Date.now();\n let status: 'ok' | 'error' = 'ok';\n const checkResults: Record<string, boolean> = {};\n\n // Run health checks\n if (checks.length > 0) {\n for (const check of checks) {\n try {\n const result = await check.check();\n checkResults[check.name] = result;\n if (!result) {\n status = 'error';\n }\n } catch (error) {\n checkResults[check.name] = false;\n status = 'error';\n }\n }\n }\n\n const response: HealthResponse = {\n status,\n timestamp: new Date().toISOString(),\n uptime: process.uptime(),\n ...(version && { version }),\n ...(Object.keys(checkResults).length > 0 && { checks: checkResults }),\n ...customData,\n };\n\n const statusCode = status === 'ok' ? 200 : 503;\n\n return NextResponse.json(response, { status: statusCode });\n };\n}\n"],"mappings":";AAuBA,SAAS,oBAAoB;AAItB,SAAS,oBAAoB,SAAuB,CAAC,GAAG;AAC7D,QAAM,EAAE,SAAS,SAAS,CAAC,GAAG,aAAa,CAAC,EAAE,IAAI;AAElD,SAAO,eAAe,MAAM;AAC1B,UAAM,YAAY,KAAK,IAAI;AAC3B,QAAI,SAAyB;AAC7B,UAAM,eAAwC,CAAC;AAG/C,QAAI,OAAO,SAAS,GAAG;AACrB,iBAAW,SAAS,QAAQ;AAC1B,YAAI;AACF,gBAAM,SAAS,MAAM,MAAM,MAAM;AACjC,uBAAa,MAAM,IAAI,IAAI;AAC3B,cAAI,CAAC,QAAQ;AACX,qBAAS;AAAA,UACX;AAAA,QACF,SAAS,OAAO;AACd,uBAAa,MAAM,IAAI,IAAI;AAC3B,mBAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAA2B;AAAA,MAC/B;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,QAAQ,QAAQ,OAAO;AAAA,MACvB,GAAI,WAAW,EAAE,QAAQ;AAAA,MACzB,GAAI,OAAO,KAAK,YAAY,EAAE,SAAS,KAAK,EAAE,QAAQ,aAAa;AAAA,MACnE,GAAG;AAAA,IACL;AAEA,UAAM,aAAa,WAAW,OAAO,MAAM;AAE3C,WAAO,aAAa,KAAK,UAAU,EAAE,QAAQ,WAAW,CAAC;AAAA,EAC3D;AACF;","names":[]}
|
package/dist/i18n/routing.d.mts
CHANGED
|
@@ -24,7 +24,6 @@ declare function createRouting(config?: Partial<I18nConfig>): {
|
|
|
24
24
|
localePrefix?: next_intl_routing.LocalePrefix<string[], "always" | "as-needed" | "never">;
|
|
25
25
|
domains?: never;
|
|
26
26
|
localeCookie?: boolean | {
|
|
27
|
-
name?: string;
|
|
28
27
|
maxAge?: number | undefined;
|
|
29
28
|
priority?: "low" | "medium" | "high" | undefined;
|
|
30
29
|
domain?: string | undefined;
|
|
@@ -32,6 +31,7 @@ declare function createRouting(config?: Partial<I18nConfig>): {
|
|
|
32
31
|
secure?: boolean | undefined;
|
|
33
32
|
sameSite?: true | false | "lax" | "strict" | "none" | undefined;
|
|
34
33
|
partitioned?: boolean | undefined;
|
|
34
|
+
name?: string;
|
|
35
35
|
};
|
|
36
36
|
alternateLinks?: boolean;
|
|
37
37
|
localeDetection?: boolean;
|
|
@@ -46,7 +46,6 @@ declare const routing: {
|
|
|
46
46
|
localePrefix?: next_intl_routing.LocalePrefix<string[], "always" | "as-needed" | "never">;
|
|
47
47
|
domains?: never;
|
|
48
48
|
localeCookie?: boolean | {
|
|
49
|
-
name?: string;
|
|
50
49
|
maxAge?: number | undefined;
|
|
51
50
|
priority?: "low" | "medium" | "high" | undefined;
|
|
52
51
|
domain?: string | undefined;
|
|
@@ -54,6 +53,7 @@ declare const routing: {
|
|
|
54
53
|
secure?: boolean | undefined;
|
|
55
54
|
sameSite?: true | false | "lax" | "strict" | "none" | undefined;
|
|
56
55
|
partitioned?: boolean | undefined;
|
|
56
|
+
name?: string;
|
|
57
57
|
};
|
|
58
58
|
alternateLinks?: boolean;
|
|
59
59
|
localeDetection?: boolean;
|
package/dist/index.mjs
CHANGED
|
@@ -14,7 +14,7 @@ var require_package = __commonJS({
|
|
|
14
14
|
"package.json"(exports, module) {
|
|
15
15
|
module.exports = {
|
|
16
16
|
name: "@djangocfg/nextjs",
|
|
17
|
-
version: "2.1.
|
|
17
|
+
version: "2.1.484",
|
|
18
18
|
description: "Next.js server utilities: sitemap, health, OG images, contact forms, navigation, config",
|
|
19
19
|
keywords: [
|
|
20
20
|
"nextjs",
|
|
@@ -670,6 +670,7 @@ import { createRequire } from "module";
|
|
|
670
670
|
import { join } from "path";
|
|
671
671
|
|
|
672
672
|
// src/config/utils/env.ts
|
|
673
|
+
import consola2 from "consola";
|
|
673
674
|
var isStaticBuild = process.env.NEXT_PUBLIC_STATIC_BUILD === "true";
|
|
674
675
|
var isDev = process.env.NODE_ENV === "development";
|
|
675
676
|
var isProduction = !isDev;
|
|
@@ -681,6 +682,15 @@ function getBasePath(isDefaultCfgAdmin) {
|
|
|
681
682
|
function getApiUrl() {
|
|
682
683
|
return isStaticBuild ? "" : process.env.NEXT_PUBLIC_API_URL || "";
|
|
683
684
|
}
|
|
685
|
+
function hasApiUrl() {
|
|
686
|
+
return isStaticBuild || Boolean(process.env.NEXT_PUBLIC_API_URL);
|
|
687
|
+
}
|
|
688
|
+
function warnIfApiUrlMissing() {
|
|
689
|
+
if (hasApiUrl() || isDev) return;
|
|
690
|
+
consola2.warn(
|
|
691
|
+
"NEXT_PUBLIC_API_URL is not set \u2014 API-backed features are disabled in this build.\nRequests that need it are skipped rather than sent to a relative path.\nIf this app DOES have a backend, the value must be present at BUILD time:\n \u2022 commit it to the app's `.env.production`, and check no `.dockerignore`\n rule (e.g. `**/.env*`) strips that file from the build context;\n \u2022 or pass it as a Dockerfile ARG/ENV before the build step.\nA compose `environment:` entry is too late \u2014 it only exists at runtime."
|
|
692
|
+
);
|
|
693
|
+
}
|
|
684
694
|
function getSiteUrl() {
|
|
685
695
|
return isStaticBuild ? "" : process.env.NEXT_PUBLIC_SITE_URL || "";
|
|
686
696
|
}
|
|
@@ -859,7 +869,7 @@ Example queries:
|
|
|
859
869
|
import chalk from "chalk";
|
|
860
870
|
import { execSync, spawn } from "child_process";
|
|
861
871
|
import Conf from "conf";
|
|
862
|
-
import
|
|
872
|
+
import consola3 from "consola";
|
|
863
873
|
import { createInterface } from "readline";
|
|
864
874
|
function createMemoryCache() {
|
|
865
875
|
const store = /* @__PURE__ */ new Map();
|
|
@@ -1078,13 +1088,13 @@ async function installPackagesWithProgress(packages) {
|
|
|
1078
1088
|
}
|
|
1079
1089
|
console.log("");
|
|
1080
1090
|
if (failedPackages.length === 0) {
|
|
1081
|
-
|
|
1091
|
+
consola3.success(`All ${total} packages installed successfully!`);
|
|
1082
1092
|
return true;
|
|
1083
1093
|
} else if (successCount > 0) {
|
|
1084
|
-
|
|
1094
|
+
consola3.warn(`${successCount}/${total} packages installed. Failed: ${failedPackages.join(", ")}`);
|
|
1085
1095
|
return false;
|
|
1086
1096
|
} else {
|
|
1087
|
-
|
|
1097
|
+
consola3.error(`Failed to install packages: ${failedPackages.join(", ")}`);
|
|
1088
1098
|
return false;
|
|
1089
1099
|
}
|
|
1090
1100
|
}
|
|
@@ -1095,7 +1105,7 @@ async function installPackages(packages) {
|
|
|
1095
1105
|
if (packages.length === 0) return true;
|
|
1096
1106
|
const pm = detectPackageManager();
|
|
1097
1107
|
const command = buildInstallCommand(packages, pm);
|
|
1098
|
-
|
|
1108
|
+
consola3.info(`Installing: ${chalk.cyan(packages.map((p) => p.name).join(", "))}`);
|
|
1099
1109
|
const spinner = createSpinner("Installing packages...");
|
|
1100
1110
|
spinner.start();
|
|
1101
1111
|
return new Promise((resolve) => {
|
|
@@ -1135,7 +1145,7 @@ async function checkAndInstallPackages(options = {}) {
|
|
|
1135
1145
|
return installPackages(toInstall);
|
|
1136
1146
|
}
|
|
1137
1147
|
console.log("");
|
|
1138
|
-
|
|
1148
|
+
consola3.box("\u{1F4E6} Missing Optional Packages");
|
|
1139
1149
|
console.log("");
|
|
1140
1150
|
for (const pkg of toInstall) {
|
|
1141
1151
|
console.log(` ${chalk.yellow("\u2022")} ${chalk.bold(pkg.name)}`);
|
|
@@ -1159,7 +1169,7 @@ async function checkAndInstallPackages(options = {}) {
|
|
|
1159
1169
|
);
|
|
1160
1170
|
if (enableAuto) {
|
|
1161
1171
|
installerCache.set("autoInstall", true);
|
|
1162
|
-
|
|
1172
|
+
consola3.info("Auto-install enabled. Run with --no-auto-install to disable.");
|
|
1163
1173
|
}
|
|
1164
1174
|
}
|
|
1165
1175
|
return success;
|
|
@@ -1170,7 +1180,7 @@ async function checkAndInstallPackages(options = {}) {
|
|
|
1170
1180
|
if (skipPermanently) {
|
|
1171
1181
|
const currentSkip = installerCache.get("skipPackages") || [];
|
|
1172
1182
|
installerCache.set("skipPackages", [...currentSkip, ...toInstall.map((p) => p.name)]);
|
|
1173
|
-
|
|
1183
|
+
consola3.info("Packages added to skip list.");
|
|
1174
1184
|
}
|
|
1175
1185
|
return false;
|
|
1176
1186
|
}
|
|
@@ -1178,19 +1188,19 @@ function printMissingPackagesInfo(packages) {
|
|
|
1178
1188
|
if (packages.length === 0) return;
|
|
1179
1189
|
const pm = detectPackageManager();
|
|
1180
1190
|
const command = buildInstallCommand(packages, pm);
|
|
1181
|
-
|
|
1182
|
-
|
|
1191
|
+
consola3.warn(`Missing optional packages: ${packages.map((p) => p.name).join(", ")}`);
|
|
1192
|
+
consola3.info(`Install with: ${chalk.cyan(command)}`);
|
|
1183
1193
|
}
|
|
1184
1194
|
function resetInstallerPreferences() {
|
|
1185
1195
|
installerCache.clear();
|
|
1186
|
-
|
|
1196
|
+
consola3.success("Installer preferences reset");
|
|
1187
1197
|
}
|
|
1188
1198
|
|
|
1189
1199
|
// src/config/packages/updater.ts
|
|
1190
1200
|
import chalk2 from "chalk";
|
|
1191
1201
|
import { spawn as spawn2 } from "child_process";
|
|
1192
1202
|
import Conf2 from "conf";
|
|
1193
|
-
import
|
|
1203
|
+
import consola4 from "consola";
|
|
1194
1204
|
import { createRequire as createRequire2 } from "module";
|
|
1195
1205
|
import { join as join2 } from "path";
|
|
1196
1206
|
import { createInterface as createInterface2 } from "readline";
|
|
@@ -1450,13 +1460,13 @@ async function updatePackagesWithProgress(packages) {
|
|
|
1450
1460
|
}
|
|
1451
1461
|
console.log("");
|
|
1452
1462
|
if (failedPackages.length === 0) {
|
|
1453
|
-
|
|
1463
|
+
consola4.success(`All ${total} packages updated successfully!`);
|
|
1454
1464
|
return true;
|
|
1455
1465
|
} else if (successCount > 0) {
|
|
1456
|
-
|
|
1466
|
+
consola4.warn(`${successCount}/${total} packages updated. Failed: ${failedPackages.join(", ")}`);
|
|
1457
1467
|
return false;
|
|
1458
1468
|
} else {
|
|
1459
|
-
|
|
1469
|
+
consola4.error(`Failed to update packages: ${failedPackages.join(", ")}`);
|
|
1460
1470
|
return false;
|
|
1461
1471
|
}
|
|
1462
1472
|
}
|
|
@@ -1481,7 +1491,7 @@ async function checkAndUpdatePackages(options = {}) {
|
|
|
1481
1491
|
return updatePackagesWithProgress(outdated);
|
|
1482
1492
|
}
|
|
1483
1493
|
console.log("");
|
|
1484
|
-
|
|
1494
|
+
consola4.box("\u{1F4E6} Updates Available");
|
|
1485
1495
|
console.log("");
|
|
1486
1496
|
for (const pkg of outdated) {
|
|
1487
1497
|
console.log(
|
|
@@ -1500,7 +1510,7 @@ async function checkAndUpdatePackages(options = {}) {
|
|
|
1500
1510
|
);
|
|
1501
1511
|
if (enableAuto) {
|
|
1502
1512
|
updaterCache.set("autoUpdate", true);
|
|
1503
|
-
|
|
1513
|
+
consola4.info("Auto-update enabled.");
|
|
1504
1514
|
}
|
|
1505
1515
|
}
|
|
1506
1516
|
return success;
|
|
@@ -1516,19 +1526,19 @@ async function checkAndUpdatePackages(options = {}) {
|
|
|
1516
1526
|
}
|
|
1517
1527
|
}
|
|
1518
1528
|
updaterCache.set("skippedVersions", skipped);
|
|
1519
|
-
|
|
1529
|
+
consola4.info("Versions skipped. Will prompt again for newer versions.");
|
|
1520
1530
|
}
|
|
1521
1531
|
return false;
|
|
1522
1532
|
}
|
|
1523
1533
|
function resetUpdaterPreferences() {
|
|
1524
1534
|
updaterCache.clear();
|
|
1525
|
-
|
|
1535
|
+
consola4.success("Updater preferences reset");
|
|
1526
1536
|
}
|
|
1527
1537
|
|
|
1528
1538
|
// src/config/utils/version.ts
|
|
1529
1539
|
import chalk3 from "chalk";
|
|
1530
1540
|
import Conf3 from "conf";
|
|
1531
|
-
import
|
|
1541
|
+
import consola5 from "consola";
|
|
1532
1542
|
import semver2 from "semver";
|
|
1533
1543
|
function createMemoryCache3() {
|
|
1534
1544
|
const store = /* @__PURE__ */ new Map();
|
|
@@ -1620,10 +1630,10 @@ function getUpdateCommand() {
|
|
|
1620
1630
|
async function printVersionInfo() {
|
|
1621
1631
|
const { hasUpdate, currentVersion, latestVersion } = await checkForUpdate();
|
|
1622
1632
|
if (!currentVersion) return;
|
|
1623
|
-
|
|
1633
|
+
consola5.box(`\u{1F4E6} @djangocfg/nextjs v${currentVersion}`);
|
|
1624
1634
|
if (hasUpdate && latestVersion) {
|
|
1625
|
-
|
|
1626
|
-
|
|
1635
|
+
consola5.warn(`Update Available! ${chalk3.red(currentVersion)} \u2192 ${chalk3.green(latestVersion)}`);
|
|
1636
|
+
consola5.info(`Run: ${chalk3.cyan(getUpdateCommand())}`);
|
|
1627
1637
|
console.log("");
|
|
1628
1638
|
}
|
|
1629
1639
|
}
|
|
@@ -1723,6 +1733,7 @@ function deepMerge(target, source) {
|
|
|
1723
1733
|
// src/config/createNextConfig.ts
|
|
1724
1734
|
function createBaseNextConfig(options = {}) {
|
|
1725
1735
|
const basePath = getBasePath(options.isDefaultCfgAdmin);
|
|
1736
|
+
warnIfApiUrlMissing();
|
|
1726
1737
|
const apiUrl = getApiUrl();
|
|
1727
1738
|
const siteUrl = getSiteUrl();
|
|
1728
1739
|
const baseConfig = {
|