nfkit 1.0.27 → 1.0.28

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/index.mjs CHANGED
@@ -1410,10 +1410,164 @@ var AppServiceBase = class {
1410
1410
  async init() {
1411
1411
  }
1412
1412
  };
1413
+
1414
+ // src/configurer/configurer.ts
1415
+ var ConfigurerInstance = class {
1416
+ constructor(config, defaultConfig) {
1417
+ this.config = config;
1418
+ this.defaultConfig = defaultConfig;
1419
+ }
1420
+ getString(key) {
1421
+ return this.config[key] || this.defaultConfig[key];
1422
+ }
1423
+ getInt(key) {
1424
+ return parseInt(this.getString(key));
1425
+ }
1426
+ getFloat(key) {
1427
+ return parseFloat(this.getString(key));
1428
+ }
1429
+ getBoolean(key) {
1430
+ const defaultBoolean = parseConfigBoolean(this.defaultConfig[key], false);
1431
+ return parseConfigBoolean(this.getString(key), defaultBoolean);
1432
+ }
1433
+ getStringArray(key) {
1434
+ return convertStringArray(this.getString(key));
1435
+ }
1436
+ getIntArray(key) {
1437
+ return convertIntArray(this.getString(key));
1438
+ }
1439
+ getFloatArray(key) {
1440
+ return convertFloatArray(this.getString(key));
1441
+ }
1442
+ getBooleanArray(key) {
1443
+ const defaultBoolean = parseConfigBoolean(this.defaultConfig[key], false);
1444
+ return convertBooleanArray(this.getString(key), defaultBoolean);
1445
+ }
1446
+ };
1447
+ var Configurer = class {
1448
+ constructor(defaultConfig) {
1449
+ this.defaultConfig = defaultConfig;
1450
+ }
1451
+ loadConfig(options = {}) {
1452
+ const readConfig = options?.obj && typeof options.obj === "object" ? options.obj : {};
1453
+ const normalizedConfig = normalizeConfigByDefaultKeys(
1454
+ readConfig,
1455
+ this.defaultConfig
1456
+ );
1457
+ return new ConfigurerInstance(
1458
+ {
1459
+ ...this.defaultConfig,
1460
+ ...normalizedConfig,
1461
+ ...options?.env || {}
1462
+ },
1463
+ this.defaultConfig
1464
+ );
1465
+ }
1466
+ generateExampleObject() {
1467
+ return Object.fromEntries(
1468
+ Object.entries(this.defaultConfig).map(([key, value]) => {
1469
+ if (value.includes(",")) {
1470
+ return [
1471
+ toCamelCaseKey(key),
1472
+ value.split(",").map((v) => toTypedValue(v))
1473
+ ];
1474
+ }
1475
+ return [toCamelCaseKey(key), toTypedValue(value)];
1476
+ })
1477
+ );
1478
+ }
1479
+ };
1480
+ function toCamelCaseKey(key) {
1481
+ const lower = key.toLowerCase();
1482
+ return lower.replace(/_([a-z0-9])/g, (_, ch) => ch.toUpperCase());
1483
+ }
1484
+ function normalizeConfigValue(value) {
1485
+ if (value == null) {
1486
+ return void 0;
1487
+ }
1488
+ if (typeof value === "string") {
1489
+ return value;
1490
+ }
1491
+ if (typeof value === "number") {
1492
+ return value.toString();
1493
+ }
1494
+ if (typeof value === "boolean") {
1495
+ return value ? "1" : "0";
1496
+ }
1497
+ if (Array.isArray(value)) {
1498
+ return value.map((item) => normalizeArrayItem(item)).join(",");
1499
+ }
1500
+ return String(value);
1501
+ }
1502
+ function normalizeArrayItem(value) {
1503
+ if (typeof value === "string") {
1504
+ return value;
1505
+ }
1506
+ if (typeof value === "number") {
1507
+ return value.toString();
1508
+ }
1509
+ if (typeof value === "boolean") {
1510
+ return value ? "1" : "0";
1511
+ }
1512
+ return String(value);
1513
+ }
1514
+ function normalizeConfigByDefaultKeys(readConfig, defaultConfig) {
1515
+ const normalizedConfig = {};
1516
+ for (const key of Object.keys(defaultConfig)) {
1517
+ const rawKey = key;
1518
+ const camelKey = toCamelCaseKey(rawKey);
1519
+ const value = readConfig[camelKey] !== void 0 ? readConfig[camelKey] : readConfig[rawKey];
1520
+ const normalized = normalizeConfigValue(value);
1521
+ if (normalized !== void 0) {
1522
+ normalizedConfig[key] = normalized;
1523
+ }
1524
+ }
1525
+ return normalizedConfig;
1526
+ }
1527
+ function parseConfigBoolean(value, defaultValue = false) {
1528
+ if (typeof value === "boolean") {
1529
+ return value;
1530
+ }
1531
+ if (typeof value === "number") {
1532
+ return value !== 0;
1533
+ }
1534
+ if (typeof value === "string") {
1535
+ const normalized = value.trim().toLowerCase();
1536
+ if (defaultValue) {
1537
+ return !(normalized === "0" || normalized === "false" || normalized === "null");
1538
+ }
1539
+ return !(normalized === "" || normalized === "0" || normalized === "false" || normalized === "null");
1540
+ }
1541
+ if (value == null) {
1542
+ return defaultValue;
1543
+ }
1544
+ return Boolean(value);
1545
+ }
1546
+ function convertStringArray(str) {
1547
+ return str?.split(",").map((s) => s.trim()).filter((s) => s) || [];
1548
+ }
1549
+ function convertIntArray(str) {
1550
+ return str?.split(",").map((s) => parseInt(s.trim())).filter((n) => !isNaN(n)) || [];
1551
+ }
1552
+ function convertFloatArray(str) {
1553
+ return str?.split(",").map((s) => parseFloat(s.trim())).filter((n) => !isNaN(n)) || [];
1554
+ }
1555
+ function convertBooleanArray(str, defaultValue = false) {
1556
+ return str?.split(",").map((s) => parseConfigBoolean(s.trim(), defaultValue)).filter((item) => typeof item === "boolean") || [];
1557
+ }
1558
+ function toTypedValue(value) {
1559
+ const trimmed = value.trim();
1560
+ if (/^\d+$/.test(trimmed)) {
1561
+ return Number.parseInt(trimmed, 10);
1562
+ }
1563
+ return trimmed;
1564
+ }
1413
1565
  export {
1414
1566
  AbortedError,
1415
1567
  AppContextCore,
1416
1568
  AppServiceBase,
1569
+ Configurer,
1570
+ ConfigurerInstance,
1417
1571
  DUAL_PENDING,
1418
1572
  DynamicMiddlewareDispatcher,
1419
1573
  I18n,