@optique/core 1.0.0-dev.1463 → 1.0.0-dev.1467

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.
@@ -1925,10 +1925,14 @@ function portRange(options) {
1925
1925
  * Creates a value parser for MAC (Media Access Control) addresses.
1926
1926
  *
1927
1927
  * Validates MAC-48 addresses (6 octets, 12 hex digits) in various formats:
1928
- * - Colon-separated: `00:1A:2B:3C:4D:5E`
1929
- * - Hyphen-separated: `00-1A-2B-3C-4D-5E`
1930
- * - Dot-separated (Cisco): `001A.2B3C.4D5E`
1931
- * - No separator: `001A2B3C4D5E`
1928
+ * - Colon-separated: `00:1A:2B:3C:4D:5E` (1–2 hex digits per octet)
1929
+ * - Hyphen-separated: `00-1A-2B-3C-4D-5E` (1–2 hex digits per octet)
1930
+ * - Dot-separated (Cisco): `001A.2B3C.4D5E` (exactly 4 hex digits per group)
1931
+ * - No separator: `001A2B3C4D5E` (exactly 12 hex digits)
1932
+ *
1933
+ * Colon-separated and hyphen-separated formats accept single-digit octets
1934
+ * (e.g., `0:1:2:3:4:5`), which are automatically zero-padded to canonical
1935
+ * two-digit form (e.g., `00:01:02:03:04:05`).
1932
1936
  *
1933
1937
  * Returns the MAC address as a formatted string according to `case` and
1934
1938
  * `outputSeparator` options.
@@ -1974,8 +1978,8 @@ function macAddress(options) {
1974
1978
  const caseOption = options?.case ?? "preserve";
1975
1979
  const outputSeparator = options?.outputSeparator;
1976
1980
  const metavar = options?.metavar ?? "MAC";
1977
- const colonRegex = /^([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2})$/;
1978
- const hyphenRegex = /^([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})$/;
1981
+ const colonRegex = /^([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2})$/;
1982
+ const hyphenRegex = /^([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})$/;
1979
1983
  const dotRegex = /^([0-9a-fA-F]{4})\.([0-9a-fA-F]{4})\.([0-9a-fA-F]{4})$/;
1980
1984
  const noneRegex = /^([0-9a-fA-F]{12})$/;
1981
1985
  return {
@@ -2040,6 +2044,7 @@ function macAddress(options) {
2040
2044
  error: msg
2041
2045
  };
2042
2046
  }
2047
+ octets = octets.map((o) => o.padStart(2, "0"));
2043
2048
  let formattedOctets = octets;
2044
2049
  if (caseOption === "upper") formattedOctets = octets.map((octet) => octet.toUpperCase());
2045
2050
  else if (caseOption === "lower") formattedOctets = octets.map((octet) => octet.toLowerCase());
@@ -1507,10 +1507,14 @@ interface MacAddressOptions {
1507
1507
  * Creates a value parser for MAC (Media Access Control) addresses.
1508
1508
  *
1509
1509
  * Validates MAC-48 addresses (6 octets, 12 hex digits) in various formats:
1510
- * - Colon-separated: `00:1A:2B:3C:4D:5E`
1511
- * - Hyphen-separated: `00-1A-2B-3C-4D-5E`
1512
- * - Dot-separated (Cisco): `001A.2B3C.4D5E`
1513
- * - No separator: `001A2B3C4D5E`
1510
+ * - Colon-separated: `00:1A:2B:3C:4D:5E` (1–2 hex digits per octet)
1511
+ * - Hyphen-separated: `00-1A-2B-3C-4D-5E` (1–2 hex digits per octet)
1512
+ * - Dot-separated (Cisco): `001A.2B3C.4D5E` (exactly 4 hex digits per group)
1513
+ * - No separator: `001A2B3C4D5E` (exactly 12 hex digits)
1514
+ *
1515
+ * Colon-separated and hyphen-separated formats accept single-digit octets
1516
+ * (e.g., `0:1:2:3:4:5`), which are automatically zero-padded to canonical
1517
+ * two-digit form (e.g., `00:01:02:03:04:05`).
1514
1518
  *
1515
1519
  * Returns the MAC address as a formatted string according to `case` and
1516
1520
  * `outputSeparator` options.
@@ -1507,10 +1507,14 @@ interface MacAddressOptions {
1507
1507
  * Creates a value parser for MAC (Media Access Control) addresses.
1508
1508
  *
1509
1509
  * Validates MAC-48 addresses (6 octets, 12 hex digits) in various formats:
1510
- * - Colon-separated: `00:1A:2B:3C:4D:5E`
1511
- * - Hyphen-separated: `00-1A-2B-3C-4D-5E`
1512
- * - Dot-separated (Cisco): `001A.2B3C.4D5E`
1513
- * - No separator: `001A2B3C4D5E`
1510
+ * - Colon-separated: `00:1A:2B:3C:4D:5E` (1–2 hex digits per octet)
1511
+ * - Hyphen-separated: `00-1A-2B-3C-4D-5E` (1–2 hex digits per octet)
1512
+ * - Dot-separated (Cisco): `001A.2B3C.4D5E` (exactly 4 hex digits per group)
1513
+ * - No separator: `001A2B3C4D5E` (exactly 12 hex digits)
1514
+ *
1515
+ * Colon-separated and hyphen-separated formats accept single-digit octets
1516
+ * (e.g., `0:1:2:3:4:5`), which are automatically zero-padded to canonical
1517
+ * two-digit form (e.g., `00:01:02:03:04:05`).
1514
1518
  *
1515
1519
  * Returns the MAC address as a formatted string according to `case` and
1516
1520
  * `outputSeparator` options.
@@ -1925,10 +1925,14 @@ function portRange(options) {
1925
1925
  * Creates a value parser for MAC (Media Access Control) addresses.
1926
1926
  *
1927
1927
  * Validates MAC-48 addresses (6 octets, 12 hex digits) in various formats:
1928
- * - Colon-separated: `00:1A:2B:3C:4D:5E`
1929
- * - Hyphen-separated: `00-1A-2B-3C-4D-5E`
1930
- * - Dot-separated (Cisco): `001A.2B3C.4D5E`
1931
- * - No separator: `001A2B3C4D5E`
1928
+ * - Colon-separated: `00:1A:2B:3C:4D:5E` (1–2 hex digits per octet)
1929
+ * - Hyphen-separated: `00-1A-2B-3C-4D-5E` (1–2 hex digits per octet)
1930
+ * - Dot-separated (Cisco): `001A.2B3C.4D5E` (exactly 4 hex digits per group)
1931
+ * - No separator: `001A2B3C4D5E` (exactly 12 hex digits)
1932
+ *
1933
+ * Colon-separated and hyphen-separated formats accept single-digit octets
1934
+ * (e.g., `0:1:2:3:4:5`), which are automatically zero-padded to canonical
1935
+ * two-digit form (e.g., `00:01:02:03:04:05`).
1932
1936
  *
1933
1937
  * Returns the MAC address as a formatted string according to `case` and
1934
1938
  * `outputSeparator` options.
@@ -1974,8 +1978,8 @@ function macAddress(options) {
1974
1978
  const caseOption = options?.case ?? "preserve";
1975
1979
  const outputSeparator = options?.outputSeparator;
1976
1980
  const metavar = options?.metavar ?? "MAC";
1977
- const colonRegex = /^([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2})$/;
1978
- const hyphenRegex = /^([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})$/;
1981
+ const colonRegex = /^([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2})$/;
1982
+ const hyphenRegex = /^([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})-([0-9a-fA-F]{1,2})$/;
1979
1983
  const dotRegex = /^([0-9a-fA-F]{4})\.([0-9a-fA-F]{4})\.([0-9a-fA-F]{4})$/;
1980
1984
  const noneRegex = /^([0-9a-fA-F]{12})$/;
1981
1985
  return {
@@ -2040,6 +2044,7 @@ function macAddress(options) {
2040
2044
  error: msg
2041
2045
  };
2042
2046
  }
2047
+ octets = octets.map((o) => o.padStart(2, "0"));
2043
2048
  let formattedOctets = octets;
2044
2049
  if (caseOption === "upper") formattedOctets = octets.map((octet) => octet.toUpperCase());
2045
2050
  else if (caseOption === "lower") formattedOctets = octets.map((octet) => octet.toLowerCase());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optique/core",
3
- "version": "1.0.0-dev.1463+507712c0",
3
+ "version": "1.0.0-dev.1467+daf159c7",
4
4
  "description": "Type-safe combinatorial command-line interface parser",
5
5
  "keywords": [
6
6
  "CLI",