@famgia/omnify-core 0.0.115 → 0.0.117

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.js CHANGED
@@ -1327,11 +1327,45 @@ var textTypes = [
1327
1327
  ];
1328
1328
 
1329
1329
  // src/validation/types/numeric.ts
1330
+ var INTEGER_DB_KEYWORDS = [
1331
+ "AUTO_INCREMENT",
1332
+ "IDENTITY",
1333
+ "SERIAL",
1334
+ "BIGSERIAL",
1335
+ "SMALLSERIAL",
1336
+ "NEXTVAL",
1337
+ "RAND()",
1338
+ "RANDOM()",
1339
+ "FLOOR()",
1340
+ "CEIL()",
1341
+ "ROUND()",
1342
+ "ABS()"
1343
+ ];
1344
+ var FLOAT_DB_KEYWORDS = [
1345
+ "RAND()",
1346
+ "RANDOM()",
1347
+ "PI()",
1348
+ "FLOOR()",
1349
+ "CEIL()",
1350
+ "ROUND()",
1351
+ "ABS()",
1352
+ "SQRT()"
1353
+ ];
1354
+ function isDbKeyword(value, keywords) {
1355
+ const upperValue = value.toUpperCase().trim();
1356
+ return keywords.some((keyword) => upperValue === keyword.toUpperCase());
1357
+ }
1330
1358
  function validateIntegerDefault(value) {
1331
1359
  if (value === void 0 || value === null || value === "") {
1332
1360
  return { valid: true };
1333
1361
  }
1334
1362
  const strValue = String(value);
1363
+ if (isDbKeyword(strValue, INTEGER_DB_KEYWORDS)) {
1364
+ return {
1365
+ valid: false,
1366
+ error: `Database function '${strValue}' is not allowed as default. Use a static integer value instead.`
1367
+ };
1368
+ }
1335
1369
  if (!/^-?\d+$/.test(strValue)) {
1336
1370
  return { valid: false, error: "Must be an integer" };
1337
1371
  }
@@ -1342,6 +1376,12 @@ function validateNumberDefault(value) {
1342
1376
  return { valid: true };
1343
1377
  }
1344
1378
  const strValue = String(value);
1379
+ if (isDbKeyword(strValue, FLOAT_DB_KEYWORDS)) {
1380
+ return {
1381
+ valid: false,
1382
+ error: `Database function '${strValue}' is not allowed as default. Use a static number value instead.`
1383
+ };
1384
+ }
1345
1385
  if (!/^-?\d+(\.\d+)?$/.test(strValue)) {
1346
1386
  return { valid: false, error: "Must be a number" };
1347
1387
  }
@@ -1452,11 +1492,50 @@ var numericTypes = [
1452
1492
  ];
1453
1493
 
1454
1494
  // src/validation/types/temporal.ts
1495
+ var TIMESTAMP_DB_KEYWORDS = [
1496
+ "CURRENT_TIMESTAMP",
1497
+ "NOW()",
1498
+ "GETDATE()",
1499
+ "GETUTCDATE()",
1500
+ "SYSDATE",
1501
+ "SYSDATETIME()",
1502
+ "LOCALTIMESTAMP",
1503
+ "CURRENT_DATE",
1504
+ "CURRENT_TIME"
1505
+ ];
1506
+ var DATETIME_DB_KEYWORDS = [
1507
+ "CURRENT_TIMESTAMP",
1508
+ "NOW()",
1509
+ "GETDATE()",
1510
+ "GETUTCDATE()",
1511
+ "SYSDATE",
1512
+ "SYSDATETIME()",
1513
+ "LOCALTIMESTAMP"
1514
+ ];
1515
+ var DATE_DB_KEYWORDS = [
1516
+ "CURRENT_DATE",
1517
+ "CURDATE()",
1518
+ "GETDATE()"
1519
+ ];
1520
+ var TIME_DB_KEYWORDS = [
1521
+ "CURRENT_TIME",
1522
+ "CURTIME()"
1523
+ ];
1524
+ function isDbKeyword2(value, keywords) {
1525
+ const upperValue = value.toUpperCase().trim();
1526
+ return keywords.some((keyword) => upperValue === keyword.toUpperCase());
1527
+ }
1455
1528
  function validateDateDefault(value) {
1456
1529
  if (value === void 0 || value === null || value === "") {
1457
1530
  return { valid: true };
1458
1531
  }
1459
1532
  const strValue = String(value);
1533
+ if (isDbKeyword2(strValue, DATE_DB_KEYWORDS)) {
1534
+ return {
1535
+ valid: false,
1536
+ error: `Database function '${strValue}' is not allowed as default. Date type only accepts static date values in YYYY-MM-DD format.`
1537
+ };
1538
+ }
1460
1539
  if (!/^\d{4}-\d{2}-\d{2}$/.test(strValue)) {
1461
1540
  return { valid: false, error: "Must be in YYYY-MM-DD format" };
1462
1541
  }
@@ -1467,16 +1546,44 @@ function validateTimeDefault(value) {
1467
1546
  return { valid: true };
1468
1547
  }
1469
1548
  const strValue = String(value);
1549
+ if (isDbKeyword2(strValue, TIME_DB_KEYWORDS)) {
1550
+ return {
1551
+ valid: false,
1552
+ error: `Database function '${strValue}' is not allowed as default. Time type only accepts static time values in HH:MM or HH:MM:SS format.`
1553
+ };
1554
+ }
1470
1555
  if (!/^\d{2}:\d{2}(:\d{2})?$/.test(strValue)) {
1471
1556
  return { valid: false, error: "Must be in HH:MM or HH:MM:SS format" };
1472
1557
  }
1473
1558
  return { valid: true };
1474
1559
  }
1560
+ function validateDateTimeDefault(value) {
1561
+ if (value === void 0 || value === null || value === "") {
1562
+ return { valid: true };
1563
+ }
1564
+ const strValue = String(value);
1565
+ if (isDbKeyword2(strValue, DATETIME_DB_KEYWORDS)) {
1566
+ return {
1567
+ valid: false,
1568
+ error: `Database function '${strValue}' is not allowed as default for DateTime. Use a static datetime value in YYYY-MM-DD HH:MM:SS format instead.`
1569
+ };
1570
+ }
1571
+ if (!/^\d{4}-\d{2}-\d{2}(T|\s)\d{2}:\d{2}(:\d{2})?/.test(strValue)) {
1572
+ return { valid: false, error: "Must be in YYYY-MM-DD HH:MM:SS format" };
1573
+ }
1574
+ return { valid: true };
1575
+ }
1475
1576
  function validateTimestampDefault(value) {
1476
1577
  if (value === void 0 || value === null || value === "") {
1477
1578
  return { valid: true };
1478
1579
  }
1479
1580
  const strValue = String(value);
1581
+ if (isDbKeyword2(strValue, TIMESTAMP_DB_KEYWORDS)) {
1582
+ return {
1583
+ valid: false,
1584
+ error: `Database function '${strValue}' is not allowed as default. Use 'useCurrent: true' instead for CURRENT_TIMESTAMP, or 'useCurrentOnUpdate: true' for ON UPDATE CURRENT_TIMESTAMP.`
1585
+ };
1586
+ }
1480
1587
  if (!/^\d{4}-\d{2}-\d{2}(T|\s)\d{2}:\d{2}(:\d{2})?/.test(strValue)) {
1481
1588
  return { valid: false, error: "Must be in YYYY-MM-DD HH:MM:SS format" };
1482
1589
  }
@@ -1516,7 +1623,7 @@ var DateTimeType = {
1516
1623
  validate() {
1517
1624
  return [];
1518
1625
  },
1519
- validateDefaultValue: validateTimestampDefault
1626
+ validateDefaultValue: validateDateTimeDefault
1520
1627
  };
1521
1628
  var TimestampType = {
1522
1629
  name: "Timestamp",
@@ -1543,11 +1650,33 @@ var temporalTypes = [
1543
1650
 
1544
1651
  // src/validation/types/special.ts
1545
1652
  var FILE_VALID_FIELDS = ["multiple", "maxFiles", "accept", "maxSize"];
1653
+ var UUID_DB_KEYWORDS = [
1654
+ "UUID()",
1655
+ "UUID_GENERATE_V4()",
1656
+ "GEN_RANDOM_UUID()",
1657
+ "NEWID()",
1658
+ "SYS_GUID()",
1659
+ "UUID_SHORT()"
1660
+ ];
1661
+ var JSON_DB_KEYWORDS = [
1662
+ "JSON_ARRAY()",
1663
+ "JSON_OBJECT()"
1664
+ ];
1665
+ function isDbKeyword3(value, keywords) {
1666
+ const upperValue = value.toUpperCase().trim();
1667
+ return keywords.some((keyword) => upperValue === keyword.toUpperCase());
1668
+ }
1546
1669
  function validateJsonDefault(value) {
1547
1670
  if (value === void 0 || value === null || value === "") {
1548
1671
  return { valid: true };
1549
1672
  }
1550
1673
  const strValue = String(value);
1674
+ if (isDbKeyword3(strValue, JSON_DB_KEYWORDS)) {
1675
+ return {
1676
+ valid: false,
1677
+ error: `Database function '${strValue}' is not allowed as default. Use valid JSON like '{}' or '[]' instead.`
1678
+ };
1679
+ }
1551
1680
  try {
1552
1681
  JSON.parse(strValue);
1553
1682
  return { valid: true };
@@ -1560,6 +1689,12 @@ function validateUuidDefault(value) {
1560
1689
  return { valid: true };
1561
1690
  }
1562
1691
  const strValue = String(value);
1692
+ if (isDbKeyword3(strValue, UUID_DB_KEYWORDS)) {
1693
+ return {
1694
+ valid: false,
1695
+ error: `Database function '${strValue}' is not allowed as default. For auto-generated UUIDs, configure at the application or database level, not in schema default.`
1696
+ };
1697
+ }
1563
1698
  if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(strValue)) {
1564
1699
  return { valid: false, error: "Must be a valid UUID" };
1565
1700
  }
@@ -2922,6 +3057,19 @@ function validateSchema(schema, options = {}) {
2922
3057
  warnings.push(...dbCompat.warnings);
2923
3058
  const rulesErrors = validateRules(name, property, schema.filePath);
2924
3059
  errors.push(...rulesErrors);
3060
+ const baseProp = property;
3061
+ if (baseProp.default !== void 0) {
3062
+ const defaultResult = validateDefaultValue(property.type, baseProp.default, baseProp);
3063
+ if (!defaultResult.valid) {
3064
+ errors.push(
3065
+ validationError(
3066
+ `Property '${name}' has invalid default value: ${defaultResult.error}`,
3067
+ buildLocation7(schema.filePath),
3068
+ property.type === "Timestamp" ? `For Timestamp type, use 'useCurrent: true' for CURRENT_TIMESTAMP behavior` : void 0
3069
+ )
3070
+ );
3071
+ }
3072
+ }
2925
3073
  }
2926
3074
  }
2927
3075
  const localizedStringWarnings = validateLocalizedStrings(schema, options.localeConfig);