diff --git a/package.json b/package.json index 5a4612c..a9c6414 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "url": "https://github.com/webdeveric/utils/issues" }, "homepage": "https://github.com/webdeveric/utils/#readme", - "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39", + "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977", "scripts": { "clean": "rimraf ./dist/", "prebuild": "pnpm clean", @@ -87,7 +87,7 @@ "devDependencies": { "@commitlint/config-conventional": "^19.8.1", "@commitlint/types": "^19.8.1", - "@types/node": "^22.15.17", + "@types/node": "^22.15.18", "@vitest/coverage-v8": "^3.1.3", "@webdeveric/eslint-config-ts": "^0.11.0", "@webdeveric/prettier-config": "^0.3.0", @@ -96,12 +96,12 @@ "conventional-changelog-conventionalcommits": "^8.0.0", "cspell": "^9.0.1", "eslint": "^8.57.1", - "eslint-config-prettier": "^10.1.3", - "eslint-import-resolver-typescript": "^3.10.1", + "eslint-config-prettier": "^10.1.5", + "eslint-import-resolver-typescript": "^4.3.4", "eslint-plugin-import": "^2.31.0", "husky": "^9.1.7", "jsdom": "^26.1.0", - "lint-staged": "^15.5.2", + "lint-staged": "^16.0.0", "prettier": "^3.5.3", "rimraf": "^6.0.1", "semantic-release": "^24.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6bfd5a2..a9ed463 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,11 +15,11 @@ importers: specifier: ^19.8.1 version: 19.8.1 '@types/node': - specifier: ^22.15.17 - version: 22.15.17 + specifier: ^22.15.18 + version: 22.15.18 '@vitest/coverage-v8': specifier: ^3.1.3 - version: 3.1.3(vitest@3.1.3(@types/node@22.15.17)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1)) + version: 3.1.3(vitest@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1)) '@webdeveric/eslint-config-ts': specifier: ^0.11.0 version: 0.11.0(eslint@8.57.1)(typescript@5.8.3) @@ -28,7 +28,7 @@ importers: version: 0.3.0(prettier@3.5.3) commitlint: specifier: ^19.8.1 - version: 19.8.1(@types/node@22.15.17)(typescript@5.8.3) + version: 19.8.1(@types/node@22.15.18)(typescript@5.8.3) commitlint-plugin-cspell: specifier: ^0.2.0 version: 0.2.0(@commitlint/lint@19.8.1) @@ -42,14 +42,14 @@ importers: specifier: ^8.57.1 version: 8.57.1 eslint-config-prettier: - specifier: ^10.1.3 - version: 10.1.3(eslint@8.57.1) + specifier: ^10.1.5 + version: 10.1.5(eslint@8.57.1) eslint-import-resolver-typescript: - specifier: ^3.10.1 - version: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1) + specifier: ^4.3.4 + version: 4.3.4(eslint-plugin-import@2.31.0)(eslint@8.57.1) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@4.3.4)(eslint@8.57.1) husky: specifier: ^9.1.7 version: 9.1.7 @@ -57,8 +57,8 @@ importers: specifier: ^26.1.0 version: 26.1.0 lint-staged: - specifier: ^15.5.2 - version: 15.5.2 + specifier: ^16.0.0 + version: 16.0.0 prettier: specifier: ^3.5.3 version: 3.5.3 @@ -76,7 +76,7 @@ importers: version: 0.9.0 vitest: specifier: ^3.1.3 - version: 3.1.3(@types/node@22.15.17)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1) + version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1) packages: @@ -670,10 +670,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} - '@npmcli/agent@3.0.0': resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} engines: {node: ^18.17.0 || >=20.5.0} @@ -986,8 +982,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@22.15.17': - resolution: {integrity: sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==} + '@types/node@22.15.18': + resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1615,8 +1611,8 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1765,8 +1761,8 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-config-prettier@10.1.3: - resolution: {integrity: sha512-vDo4d9yQE+cS2tdIT4J02H/16veRvkHgiLDRpej+WL67oCfbOb97itZXn8wMPJ/GsiEBVjrjs//AVNw2Cp1EcA==} + eslint-config-prettier@10.1.5: + resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1774,9 +1770,9 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.10.1: - resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} - engines: {node: ^14.18.0 || >=16.0.0} + eslint-import-resolver-typescript@4.3.4: + resolution: {integrity: sha512-buzw5z5VtiQMysYLH9iW9BV04YyZebsw+gPi+c4FCjfS9i6COYOrEWw9t3m3wA9PFBfqcBCqWf32qrXLbwafDw==} + engines: {node: ^16.17.0 || >=18.6.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' @@ -1867,8 +1863,8 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - execa@9.5.2: - resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + execa@9.5.3: + resolution: {integrity: sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg==} engines: {node: ^18.19.0 || >=20.5.0} expect-type@1.2.1: @@ -2175,8 +2171,8 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} @@ -2536,9 +2532,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.5.2: - resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} - engines: {node: '>=18.12.0'} + lint-staged@16.0.0: + resolution: {integrity: sha512-sUCprePs6/rbx4vKC60Hez6X10HPkpDJaGcy3D1NdwR7g1RcNkWL8q9mJMreOqmHBTs+1sNFp+wOiX9fr+hoOQ==} + engines: {node: '>=20.18'} hasBin: true listr2@8.3.3: @@ -2748,13 +2744,17 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nano-spawn@1.0.1: + resolution: {integrity: sha512-BfcvzBlUTxSDWfT+oH7vd6CbUV+rThLLHCIym/QO6GGLBsyVXleZs00fto2i2jzC/wPiBYk5jyOmpXWg4YopiA==} + engines: {node: '>=20.18'} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.2.3: - resolution: {integrity: sha512-Mi7JISo/4Ij2tDZ2xBE2WH+/KvVlkhA6juEjpEeRAVPNCpN3nxJo/5FhDNKgBcdmcmhaH6JjgST4xY/23ZYK0w==} + napi-postinstall@0.2.4: + resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -3317,8 +3317,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true @@ -3725,8 +3725,8 @@ packages: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} - universal-user-agent@7.0.2: - resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -4027,11 +4027,11 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@19.8.1(@types/node@22.15.17)(typescript@5.8.3)': + '@commitlint/cli@19.8.1(@types/node@22.15.18)(typescript@5.8.3)': dependencies: '@commitlint/format': 19.8.1 '@commitlint/lint': 19.8.1 - '@commitlint/load': 19.8.1(@types/node@22.15.17)(typescript@5.8.3) + '@commitlint/load': 19.8.1(@types/node@22.15.18)(typescript@5.8.3) '@commitlint/read': 19.8.1 '@commitlint/types': 19.8.1 tinyexec: 1.0.1 @@ -4069,7 +4069,7 @@ snapshots: '@commitlint/is-ignored@19.8.1': dependencies: '@commitlint/types': 19.8.1 - semver: 7.7.1 + semver: 7.7.2 '@commitlint/lint@19.8.1': dependencies: @@ -4078,7 +4078,7 @@ snapshots: '@commitlint/rules': 19.8.1 '@commitlint/types': 19.8.1 - '@commitlint/load@19.8.1(@types/node@22.15.17)(typescript@5.8.3)': + '@commitlint/load@19.8.1(@types/node@22.15.18)(typescript@5.8.3)': dependencies: '@commitlint/config-validator': 19.8.1 '@commitlint/execute-rule': 19.8.1 @@ -4086,7 +4086,7 @@ snapshots: '@commitlint/types': 19.8.1 chalk: 5.4.1 cosmiconfig: 9.0.0(typescript@5.8.3) - cosmiconfig-typescript-loader: 6.1.0(@types/node@22.15.17)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.15.18)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -4469,7 +4469,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.1 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -4485,7 +4485,7 @@ snapshots: '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0 + debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4547,8 +4547,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nolyfill/is-core-module@1.0.39': {} - '@npmcli/agent@3.0.0': dependencies: agent-base: 7.1.3 @@ -4591,7 +4589,7 @@ snapshots: promise-all-reject-late: 1.0.1 promise-call-limit: 3.0.2 read-package-json-fast: 4.0.0 - semver: 7.7.1 + semver: 7.7.2 ssri: 12.0.0 treeverse: 3.0.0 walk-up-path: 4.0.0 @@ -4600,7 +4598,7 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.1 + semver: 7.7.2 '@npmcli/git@6.0.3': dependencies: @@ -4610,7 +4608,7 @@ snapshots: npm-pick-manifest: 10.0.0 proc-log: 5.0.0 promise-retry: 2.0.1 - semver: 7.7.1 + semver: 7.7.2 which: 5.0.0 '@npmcli/installed-package-contents@3.0.0': @@ -4631,7 +4629,7 @@ snapshots: json-parse-even-better-errors: 4.0.0 pacote: 21.0.0 proc-log: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -4646,7 +4644,7 @@ snapshots: hosted-git-info: 8.1.0 json-parse-even-better-errors: 4.0.0 proc-log: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 validate-npm-package-license: 3.0.4 '@npmcli/promise-spawn@8.0.2': @@ -4680,18 +4678,18 @@ snapshots: '@octokit/request-error': 6.1.8 '@octokit/types': 14.0.0 before-after-hook: 3.0.2 - universal-user-agent: 7.0.2 + universal-user-agent: 7.0.3 '@octokit/endpoint@10.1.4': dependencies: '@octokit/types': 14.0.0 - universal-user-agent: 7.0.2 + universal-user-agent: 7.0.3 '@octokit/graphql@8.2.2': dependencies: '@octokit/request': 9.2.3 '@octokit/types': 14.0.0 - universal-user-agent: 7.0.2 + universal-user-agent: 7.0.3 '@octokit/openapi-types@25.0.0': {} @@ -4723,7 +4721,7 @@ snapshots: '@octokit/request-error': 6.1.8 '@octokit/types': 14.0.0 fast-content-type-parse: 2.0.1 - universal-user-agent: 7.0.2 + universal-user-agent: 7.0.3 '@octokit/types@14.0.0': dependencies: @@ -4814,7 +4812,7 @@ snapshots: conventional-changelog-writer: 8.0.1 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.1.0 - debug: 4.4.0 + debug: 4.4.1 import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 @@ -4832,7 +4830,7 @@ snapshots: '@octokit/plugin-throttling': 10.0.0(@octokit/core@6.1.5) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.4.0 + debug: 4.4.1 dir-glob: 3.0.1 globby: 14.1.0 http-proxy-agent: 7.0.2 @@ -4850,7 +4848,7 @@ snapshots: dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - execa: 9.5.2 + execa: 9.5.3 fs-extra: 11.3.0 lodash-es: 4.17.21 nerf-dart: 1.0.0 @@ -4860,7 +4858,7 @@ snapshots: read-pkg: 9.0.1 registry-auth-token: 5.1.0 semantic-release: 24.2.3(typescript@5.8.3) - semver: 7.7.1 + semver: 7.7.2 tempy: 3.1.0 '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.3(typescript@5.8.3))': @@ -4869,7 +4867,7 @@ snapshots: conventional-changelog-writer: 8.0.1 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.1.0 - debug: 4.4.0 + debug: 4.4.1 get-stream: 7.0.1 import-from-esm: 2.0.0 into-stream: 7.0.0 @@ -4931,13 +4929,13 @@ snapshots: '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 22.15.17 + '@types/node': 22.15.18 '@types/estree@1.0.7': {} '@types/json5@0.0.29': {} - '@types/node@22.15.17': + '@types/node@22.15.18': dependencies: undici-types: 6.21.0 @@ -4967,7 +4965,7 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0 + debug: 4.4.1 eslint: 8.57.1 optionalDependencies: typescript: 5.8.3 @@ -4983,7 +4981,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) - debug: 4.4.0 + debug: 4.4.1 eslint: 8.57.1 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: @@ -4997,11 +4995,11 @@ snapshots: dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0 + debug: 4.4.1 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -5079,11 +5077,11 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.7.2': optional: true - '@vitest/coverage-v8@3.1.3(vitest@3.1.3(@types/node@22.15.17)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1))': + '@vitest/coverage-v8@3.1.3(vitest@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - debug: 4.4.0 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -5093,7 +5091,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.1.3(@types/node@22.15.17)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1) + vitest: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1) transitivePeerDependencies: - supports-color @@ -5104,13 +5102,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(yaml@2.7.1))': + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.1.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(yaml@2.7.1) '@vitest/pretty-format@3.1.3': dependencies: @@ -5450,9 +5448,9 @@ snapshots: '@commitlint/types': 19.8.1 cspell-lib: 9.0.1 - commitlint@19.8.1(@types/node@22.15.17)(typescript@5.8.3): + commitlint@19.8.1(@types/node@22.15.18)(typescript@5.8.3): dependencies: - '@commitlint/cli': 19.8.1(@types/node@22.15.17)(typescript@5.8.3) + '@commitlint/cli': 19.8.1(@types/node@22.15.18)(typescript@5.8.3) '@commitlint/types': 19.8.1 transitivePeerDependencies: - '@types/node' @@ -5493,7 +5491,7 @@ snapshots: conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 - semver: 7.7.1 + semver: 7.7.2 conventional-commits-filter@5.0.0: {} @@ -5512,9 +5510,9 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@6.1.0(@types/node@22.15.17)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3): + cosmiconfig-typescript-loader@6.1.0(@types/node@22.15.18)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3): dependencies: - '@types/node': 22.15.17 + '@types/node': 22.15.18 cosmiconfig: 9.0.0(typescript@5.8.3) jiti: 2.4.2 typescript: 5.8.3 @@ -5622,7 +5620,7 @@ snapshots: cspell-lib: 9.0.1 fast-json-stable-stringify: 2.1.0 file-entry-cache: 9.1.0 - semver: 7.7.1 + semver: 7.7.2 tinyglobby: 0.2.13 cssesc@3.0.0: {} @@ -5661,7 +5659,7 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0: + debug@4.4.1: dependencies: ms: 2.1.3 @@ -5862,7 +5860,7 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-prettier@10.1.3(eslint@8.57.1): + eslint-config-prettier@10.1.5(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -5874,10 +5872,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1): + eslint-import-resolver-typescript@4.3.4(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.0 + debug: 4.4.1 eslint: 8.57.1 get-tsconfig: 4.10.0 is-bun-module: 2.0.0 @@ -5885,22 +5882,22 @@ snapshots: tinyglobby: 0.2.13 unrs-resolver: 1.7.2 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@4.3.4)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.3.4)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 4.3.4(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@4.3.4)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -5911,7 +5908,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.3.4)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -5949,7 +5946,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -6017,7 +6014,7 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - execa@9.5.2: + execa@9.5.3: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.6 @@ -6354,19 +6351,19 @@ snapshots: html-escaper@2.0.2: {} - http-cache-semantics@4.1.1: {} + http-cache-semantics@4.2.0: {} http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -6395,7 +6392,7 @@ snapshots: import-from-esm@2.0.0: dependencies: - debug: 4.4.0 + debug: 4.4.1 import-meta-resolve: 4.1.0 transitivePeerDependencies: - supports-color @@ -6464,7 +6461,7 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 is-callable@1.2.7: {} @@ -6601,7 +6598,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.0 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -6705,15 +6702,15 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@15.5.2: + lint-staged@16.0.0: dependencies: chalk: 5.4.1 commander: 13.1.0 - debug: 4.4.0 - execa: 8.0.1 + debug: 4.4.1 lilconfig: 3.1.3 listr2: 8.3.3 micromatch: 4.0.8 + nano-spawn: 1.0.1 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.7.1 @@ -6803,13 +6800,13 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 make-fetch-happen@14.0.3: dependencies: '@npmcli/agent': 3.0.0 cacache: 19.0.1 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 minipass: 7.1.2 minipass-fetch: 4.0.1 minipass-flush: 1.0.5 @@ -6922,9 +6919,11 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nano-spawn@1.0.1: {} + nanoid@3.3.11: {} - napi-postinstall@0.2.3: {} + napi-postinstall@0.2.4: {} natural-compare@1.4.0: {} @@ -6949,7 +6948,7 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 tar: 7.4.3 tinyglobby: 0.2.13 which: 5.0.0 @@ -6963,7 +6962,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.1 + semver: 7.7.2 validate-npm-package-license: 3.0.4 normalize-url@8.0.1: {} @@ -6974,7 +6973,7 @@ snapshots: npm-install-checks@7.1.1: dependencies: - semver: 7.7.1 + semver: 7.7.2 npm-normalize-package-bin@4.0.0: {} @@ -6982,7 +6981,7 @@ snapshots: dependencies: hosted-git-info: 8.1.0 proc-log: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 validate-npm-package-name: 6.0.0 npm-packlist@10.0.0: @@ -6994,7 +6993,7 @@ snapshots: npm-install-checks: 7.1.1 npm-normalize-package-bin: 4.0.0 npm-package-arg: 12.0.2 - semver: 7.7.1 + semver: 7.7.2 npm-registry-fetch@18.0.2: dependencies: @@ -7449,9 +7448,9 @@ snapshots: '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.3(typescript@5.8.3)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.8.3) - debug: 4.4.0 + debug: 4.4.1 env-ci: 11.1.0 - execa: 9.5.2 + execa: 9.5.3 figures: 6.1.0 find-versions: 6.0.0 get-stream: 6.0.1 @@ -7467,7 +7466,7 @@ snapshots: p-reduce: 3.0.0 read-package-up: 11.0.0 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 semver-diff: 4.0.0 signale: 1.4.0 yargs: 17.7.2 @@ -7477,13 +7476,13 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 semver-regex@4.0.5: {} semver@6.3.1: {} - semver@7.7.1: {} + semver@7.7.2: {} set-function-length@1.2.2: dependencies: @@ -7585,7 +7584,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 socks: 2.8.4 transitivePeerDependencies: - supports-color @@ -7837,7 +7836,7 @@ snapshots: tuf-js@3.0.1: dependencies: '@tufjs/models': 3.0.1 - debug: 4.4.0 + debug: 4.4.1 make-fetch-happen: 14.0.3 transitivePeerDependencies: - supports-color @@ -7919,13 +7918,13 @@ snapshots: dependencies: crypto-random-string: 4.0.0 - universal-user-agent@7.0.2: {} + universal-user-agent@7.0.3: {} universalify@2.0.1: {} unrs-resolver@1.7.2: dependencies: - napi-postinstall: 0.2.3 + napi-postinstall: 0.2.4 optionalDependencies: '@unrs/resolver-binding-darwin-arm64': 1.7.2 '@unrs/resolver-binding-darwin-x64': 1.7.2 @@ -7968,13 +7967,13 @@ snapshots: transitivePeerDependencies: - supports-color - vite-node@3.1.3(@types/node@22.15.17)(jiti@2.4.2)(yaml@2.7.1): + vite-node@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(yaml@2.7.1): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -7989,7 +7988,7 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(yaml@2.7.1): + vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(yaml@2.7.1): dependencies: esbuild: 0.25.4 fdir: 6.4.4(picomatch@4.0.2) @@ -7998,22 +7997,22 @@ snapshots: rollup: 4.40.2 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.17 + '@types/node': 22.15.18 fsevents: 2.3.3 jiti: 2.4.2 yaml: 2.7.1 - vitest@3.1.3(@types/node@22.15.17)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1): + vitest@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(jsdom@26.1.0)(yaml@2.7.1): dependencies: '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(yaml@2.7.1)) + '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(yaml@2.7.1)) '@vitest/pretty-format': 3.1.3 '@vitest/runner': 3.1.3 '@vitest/snapshot': 3.1.3 '@vitest/spy': 3.1.3 '@vitest/utils': 3.1.3 chai: 5.2.0 - debug: 4.4.0 + debug: 4.4.1 expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 @@ -8023,11 +8022,11 @@ snapshots: tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(yaml@2.7.1) - vite-node: 3.1.3(@types/node@22.15.17)(jiti@2.4.2)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(yaml@2.7.1) + vite-node: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.15.17 + '@types/node': 22.15.18 jsdom: 26.1.0 transitivePeerDependencies: - jiti diff --git a/src/predicate/isISODateString.ts b/src/predicate/isISODateString.ts index 8dbc79e..92d05df 100644 --- a/src/predicate/isISODateString.ts +++ b/src/predicate/isISODateString.ts @@ -3,6 +3,12 @@ import { matching } from './factory/matching.js'; import type { ISODateString } from '../types/date-time.js'; export const ISO_DATE_PATTERN = - /^(?[+-]?\d{4,})-(?[01]\d)-(?0[1-9]|[12]\d|3[01])T(?\d{2}):(?\d{2}):(?\d{2})(\.(?\d{3}Z))?$/; + /^(?\d{4,})-(?[01]\d)-(?0[1-9]|[12]\d|3[01])T(?\d{2}):(?\d{2}):(?\d{2})\.(?\d{3}Z)$/; +/** + * This checks to see if the input matches the format that `toISOString()` + * returns, which is a simplified format based on ISO 8601. + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + */ export const isISODateString = matching(ISO_DATE_PATTERN); diff --git a/src/types/date-time.ts b/src/types/date-time.ts index 26d2c9a..0660ddf 100644 --- a/src/types/date-time.ts +++ b/src/types/date-time.ts @@ -3,14 +3,20 @@ import type { NumericString } from './common.js'; export type DateInput = ConstructorParameters[0]; -export type YearString = Branded; +export type YearString = Branded, 'YearString'>; -export type MonthString = Branded; +export type MonthString = Branded, 'MonthString'>; -export type DayString = Branded; +export type DayString = Branded, 'DayString'>; export type DateString = Branded<`${YearString}-${MonthString}-${DayString}`, 'DateString'>; export type TimeString = Branded<`${number}:${number}:${number}`, 'TimeString'>; +/** + * This type describes what is returned by the `toISOString()` method of the `Date` object. + * It is a simplified format based on ISO 8601 and not a complete representation of the standard. + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + */ export type ISODateString = Branded<`${DateString}T${TimeString}.${number}Z`, 'ISODateString'>; diff --git a/test/type-predicate.test.ts b/test/type-predicate.test.ts index 27f3834..3372f8f 100644 --- a/test/type-predicate.test.ts +++ b/test/type-predicate.test.ts @@ -324,11 +324,15 @@ describe('isIntString()', () => { }); describe('isISODateString()', () => { - it('Returns boolean indicating input is an ISODateString', () => { - expect(isISODateString(new Date(0).toISOString())).toBeTruthy(); - expect(isISODateString(new Date('+9999-12-31').toISOString())).toBeTruthy(); - expect(isISODateString(false)).toBeFalsy(); - expect(isISODateString(null)).toBeFalsy(); + it.each([new Date(0).toISOString(), new Date('+9999-12-31').toISOString()])( + 'Returns true for valid input: "%s"', + (input) => { + expect(isISODateString(input)).toBeTruthy(); + }, + ); + + it.each(['9999-12-31T06:00:00', null, false, ''])('Returns false for invalid input: "%s"', (input) => { + expect(isISODateString(input)).toBeFalsy(); }); });