immosquare-cleaner 0.1.32 → 0.1.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (376) hide show
  1. checksums.yaml +4 -4
  2. data/lib/immosquare-cleaner/version.rb +1 -1
  3. data/node_modules/@eslint/eslintrc/README.md +15 -4
  4. data/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs +57 -18
  5. data/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs.map +1 -1
  6. data/node_modules/@eslint/eslintrc/dist/eslintrc.cjs +60 -34
  7. data/node_modules/@eslint/eslintrc/dist/eslintrc.cjs.map +1 -1
  8. data/node_modules/@eslint/eslintrc/lib/config-array/config-array.js +3 -16
  9. data/node_modules/@eslint/eslintrc/lib/shared/config-validator.js +63 -18
  10. data/node_modules/@eslint/eslintrc/package.json +4 -4
  11. data/node_modules/@eslint/js/package.json +2 -2
  12. data/node_modules/@eslint/js/src/configs/eslint-all.js +9 -1
  13. data/node_modules/@eslint/js/src/configs/eslint-recommended.js +12 -5
  14. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/LICENSE +201 -0
  15. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/README.md +105 -0
  16. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/dist/eslint-visitor-keys.cjs +384 -0
  17. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/dist/eslint-visitor-keys.d.cts +27 -0
  18. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/dist/index.d.ts +16 -0
  19. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/dist/visitor-keys.d.ts +12 -0
  20. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/lib/index.js +65 -0
  21. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/lib/visitor-keys.js +315 -0
  22. data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/package.json +74 -0
  23. data/node_modules/@humanwhocodes/config-array/api.js +114 -16
  24. data/node_modules/@humanwhocodes/config-array/package.json +5 -3
  25. data/node_modules/@humanwhocodes/object-schema/CHANGELOG.md +7 -0
  26. data/node_modules/@humanwhocodes/object-schema/package.json +6 -1
  27. data/node_modules/@humanwhocodes/retry/LICENSE +201 -0
  28. data/node_modules/@humanwhocodes/retry/README.md +122 -0
  29. data/node_modules/@humanwhocodes/retry/dist/retrier.cjs +267 -0
  30. data/node_modules/@humanwhocodes/retry/dist/retrier.d.ts +24 -0
  31. data/node_modules/@humanwhocodes/retry/dist/retrier.js +265 -0
  32. data/node_modules/@humanwhocodes/retry/dist/retrier.min.js +1 -0
  33. data/node_modules/@humanwhocodes/retry/dist/retrier.mjs +265 -0
  34. data/node_modules/@humanwhocodes/retry/package.json +74 -0
  35. data/node_modules/@types/semver-utils/LICENSE +21 -0
  36. data/node_modules/@types/semver-utils/README.md +34 -0
  37. data/node_modules/@types/semver-utils/index.d.ts +15 -0
  38. data/node_modules/@types/semver-utils/package.json +25 -0
  39. data/node_modules/acorn/CHANGELOG.md +36 -0
  40. data/node_modules/acorn/README.md +8 -3
  41. data/node_modules/acorn/dist/acorn.d.mts +857 -26
  42. data/node_modules/acorn/dist/acorn.d.ts +833 -268
  43. data/node_modules/acorn/dist/acorn.js +33 -21
  44. data/node_modules/acorn/dist/acorn.mjs +33 -21
  45. data/node_modules/acorn/package.json +1 -1
  46. data/node_modules/cacheable-request/node_modules/keyv/README.md +429 -0
  47. data/node_modules/cacheable-request/node_modules/keyv/package.json +57 -0
  48. data/node_modules/cacheable-request/node_modules/keyv/src/index.d.ts +112 -0
  49. data/node_modules/cacheable-request/node_modules/keyv/src/index.js +264 -0
  50. data/node_modules/doctrine/CHANGELOG.md +0 -7
  51. data/node_modules/doctrine/lib/doctrine.js +1 -0
  52. data/node_modules/doctrine/package.json +8 -9
  53. data/node_modules/eslint/README.md +31 -28
  54. data/node_modules/eslint/bin/eslint.js +4 -3
  55. data/node_modules/eslint/conf/ecma-version.js +16 -0
  56. data/node_modules/eslint/conf/globals.js +1 -0
  57. data/node_modules/eslint/conf/rule-type-list.json +3 -1
  58. data/node_modules/eslint/lib/api.js +7 -11
  59. data/node_modules/eslint/lib/cli-engine/cli-engine.js +14 -3
  60. data/node_modules/eslint/lib/cli-engine/formatters/formatters-meta.json +1 -29
  61. data/node_modules/eslint/lib/cli-engine/lint-result-cache.js +2 -2
  62. data/node_modules/eslint/lib/cli.js +115 -36
  63. data/node_modules/eslint/lib/config/default-config.js +3 -0
  64. data/node_modules/eslint/lib/config/flat-config-array.js +110 -24
  65. data/node_modules/eslint/lib/config/flat-config-helpers.js +41 -20
  66. data/node_modules/eslint/lib/config/flat-config-schema.js +1 -7
  67. data/node_modules/eslint/lib/config/rule-validator.js +42 -6
  68. data/node_modules/eslint/lib/eslint/eslint-helpers.js +116 -58
  69. data/node_modules/eslint/lib/eslint/eslint.js +892 -377
  70. data/node_modules/eslint/lib/eslint/index.js +2 -2
  71. data/node_modules/eslint/lib/eslint/legacy-eslint.js +728 -0
  72. data/node_modules/eslint/lib/linter/apply-disable-directives.js +59 -31
  73. data/node_modules/eslint/lib/linter/code-path-analysis/code-path-analyzer.js +0 -1
  74. data/node_modules/eslint/lib/linter/code-path-analysis/code-path.js +32 -30
  75. data/node_modules/eslint/lib/linter/code-path-analysis/fork-context.js +1 -1
  76. data/node_modules/eslint/lib/linter/config-comment-parser.js +8 -11
  77. data/node_modules/eslint/lib/linter/index.js +1 -3
  78. data/node_modules/eslint/lib/linter/interpolate.js +24 -2
  79. data/node_modules/eslint/lib/linter/linter.js +428 -207
  80. data/node_modules/eslint/lib/linter/report-translator.js +3 -3
  81. data/node_modules/eslint/lib/linter/rules.js +6 -15
  82. data/node_modules/eslint/lib/linter/source-code-fixer.js +1 -1
  83. data/node_modules/eslint/lib/linter/timing.js +16 -8
  84. data/node_modules/eslint/lib/options.js +35 -3
  85. data/node_modules/eslint/lib/rule-tester/index.js +3 -1
  86. data/node_modules/eslint/lib/rule-tester/rule-tester.js +424 -347
  87. data/node_modules/eslint/lib/rules/array-bracket-newline.js +1 -1
  88. data/node_modules/eslint/lib/rules/array-bracket-spacing.js +1 -1
  89. data/node_modules/eslint/lib/rules/block-scoped-var.js +1 -1
  90. data/node_modules/eslint/lib/rules/callback-return.js +2 -2
  91. data/node_modules/eslint/lib/rules/camelcase.js +3 -5
  92. data/node_modules/eslint/lib/rules/capitalized-comments.js +10 -7
  93. data/node_modules/eslint/lib/rules/comma-dangle.js +1 -1
  94. data/node_modules/eslint/lib/rules/comma-style.js +2 -2
  95. data/node_modules/eslint/lib/rules/complexity.js +14 -1
  96. data/node_modules/eslint/lib/rules/constructor-super.js +99 -100
  97. data/node_modules/eslint/lib/rules/default-case.js +1 -1
  98. data/node_modules/eslint/lib/rules/eol-last.js +2 -2
  99. data/node_modules/eslint/lib/rules/function-paren-newline.js +2 -2
  100. data/node_modules/eslint/lib/rules/indent-legacy.js +5 -5
  101. data/node_modules/eslint/lib/rules/indent.js +5 -5
  102. data/node_modules/eslint/lib/rules/index.js +1 -2
  103. data/node_modules/eslint/lib/rules/key-spacing.js +2 -2
  104. data/node_modules/eslint/lib/rules/line-comment-position.js +1 -1
  105. data/node_modules/eslint/lib/rules/lines-around-directive.js +2 -2
  106. data/node_modules/eslint/lib/rules/max-depth.js +1 -1
  107. data/node_modules/eslint/lib/rules/max-len.js +3 -3
  108. data/node_modules/eslint/lib/rules/max-lines.js +3 -3
  109. data/node_modules/eslint/lib/rules/max-nested-callbacks.js +1 -1
  110. data/node_modules/eslint/lib/rules/max-params.js +1 -1
  111. data/node_modules/eslint/lib/rules/max-statements.js +1 -1
  112. data/node_modules/eslint/lib/rules/multiline-comment-style.js +7 -7
  113. data/node_modules/eslint/lib/rules/new-cap.js +1 -1
  114. data/node_modules/eslint/lib/rules/newline-after-var.js +1 -1
  115. data/node_modules/eslint/lib/rules/newline-before-return.js +1 -1
  116. data/node_modules/eslint/lib/rules/no-case-declarations.js +13 -1
  117. data/node_modules/eslint/lib/rules/no-constant-binary-expression.js +7 -8
  118. data/node_modules/eslint/lib/rules/no-constant-condition.js +18 -7
  119. data/node_modules/eslint/lib/rules/no-constructor-return.js +2 -2
  120. data/node_modules/eslint/lib/rules/no-dupe-class-members.js +2 -2
  121. data/node_modules/eslint/lib/rules/no-else-return.js +1 -1
  122. data/node_modules/eslint/lib/rules/no-empty-function.js +2 -2
  123. data/node_modules/eslint/lib/rules/no-empty-static-block.js +1 -1
  124. data/node_modules/eslint/lib/rules/no-extend-native.js +1 -2
  125. data/node_modules/eslint/lib/rules/no-extra-semi.js +1 -1
  126. data/node_modules/eslint/lib/rules/no-fallthrough.js +41 -16
  127. data/node_modules/eslint/lib/rules/no-implicit-coercion.js +66 -24
  128. data/node_modules/eslint/lib/rules/no-inner-declarations.js +23 -2
  129. data/node_modules/eslint/lib/rules/no-invalid-regexp.js +1 -1
  130. data/node_modules/eslint/lib/rules/no-invalid-this.js +1 -1
  131. data/node_modules/eslint/lib/rules/no-lone-blocks.js +3 -3
  132. data/node_modules/eslint/lib/rules/no-loss-of-precision.js +1 -1
  133. data/node_modules/eslint/lib/rules/no-misleading-character-class.js +225 -69
  134. data/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js +1 -1
  135. data/node_modules/eslint/lib/rules/no-multiple-empty-lines.js +1 -1
  136. data/node_modules/eslint/lib/rules/no-new-native-nonconstructor.js +1 -1
  137. data/node_modules/eslint/lib/rules/no-new-symbol.js +8 -1
  138. data/node_modules/eslint/lib/rules/no-restricted-globals.js +1 -1
  139. data/node_modules/eslint/lib/rules/no-restricted-imports.js +186 -40
  140. data/node_modules/eslint/lib/rules/no-restricted-modules.js +2 -2
  141. data/node_modules/eslint/lib/rules/no-return-await.js +1 -1
  142. data/node_modules/eslint/lib/rules/no-sequences.js +1 -0
  143. data/node_modules/eslint/lib/rules/no-this-before-super.js +45 -13
  144. data/node_modules/eslint/lib/rules/no-trailing-spaces.js +2 -3
  145. data/node_modules/eslint/lib/rules/no-unneeded-ternary.js +1 -1
  146. data/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js +1 -1
  147. data/node_modules/eslint/lib/rules/no-unused-private-class-members.js +1 -1
  148. data/node_modules/eslint/lib/rules/no-unused-vars.js +197 -36
  149. data/node_modules/eslint/lib/rules/no-useless-assignment.js +566 -0
  150. data/node_modules/eslint/lib/rules/no-useless-backreference.js +1 -1
  151. data/node_modules/eslint/lib/rules/no-useless-computed-key.js +2 -2
  152. data/node_modules/eslint/lib/rules/no-useless-return.js +7 -2
  153. data/node_modules/eslint/lib/rules/object-curly-spacing.js +3 -3
  154. data/node_modules/eslint/lib/rules/object-property-newline.js +1 -1
  155. data/node_modules/eslint/lib/rules/one-var.js +5 -5
  156. data/node_modules/eslint/lib/rules/padded-blocks.js +7 -7
  157. data/node_modules/eslint/lib/rules/prefer-arrow-callback.js +3 -3
  158. data/node_modules/eslint/lib/rules/prefer-reflect.js +1 -1
  159. data/node_modules/eslint/lib/rules/prefer-regex-literals.js +1 -1
  160. data/node_modules/eslint/lib/rules/prefer-template.js +1 -1
  161. data/node_modules/eslint/lib/rules/radix.js +2 -2
  162. data/node_modules/eslint/lib/rules/semi-style.js +1 -1
  163. data/node_modules/eslint/lib/rules/sort-imports.js +1 -1
  164. data/node_modules/eslint/lib/rules/sort-keys.js +1 -1
  165. data/node_modules/eslint/lib/rules/sort-vars.js +1 -1
  166. data/node_modules/eslint/lib/rules/space-unary-ops.js +1 -1
  167. data/node_modules/eslint/lib/rules/strict.js +1 -1
  168. data/node_modules/eslint/lib/rules/use-isnan.js +101 -7
  169. data/node_modules/eslint/lib/rules/utils/ast-utils.js +16 -7
  170. data/node_modules/eslint/lib/rules/utils/char-source.js +240 -0
  171. data/node_modules/eslint/lib/rules/utils/lazy-loading-rule-map.js +1 -1
  172. data/node_modules/eslint/lib/rules/utils/unicode/index.js +9 -4
  173. data/node_modules/eslint/lib/rules/yield-star-spacing.js +1 -1
  174. data/node_modules/eslint/lib/shared/runtime-info.js +1 -0
  175. data/node_modules/eslint/lib/shared/serialization.js +55 -0
  176. data/node_modules/eslint/lib/shared/stats.js +30 -0
  177. data/node_modules/eslint/lib/shared/string-utils.js +9 -11
  178. data/node_modules/eslint/lib/shared/types.js +35 -1
  179. data/node_modules/eslint/lib/source-code/index.js +3 -1
  180. data/node_modules/eslint/lib/source-code/source-code.js +299 -85
  181. data/node_modules/eslint/lib/source-code/token-store/backward-token-cursor.js +3 -3
  182. data/node_modules/eslint/lib/source-code/token-store/cursors.js +4 -2
  183. data/node_modules/eslint/lib/source-code/token-store/forward-token-comment-cursor.js +3 -3
  184. data/node_modules/eslint/lib/source-code/token-store/forward-token-cursor.js +3 -3
  185. data/node_modules/eslint/lib/source-code/token-store/index.js +2 -2
  186. data/node_modules/eslint/lib/unsupported-api.js +3 -5
  187. data/node_modules/eslint/messages/no-config-found.js +1 -1
  188. data/node_modules/eslint/messages/plugin-conflict.js +1 -1
  189. data/node_modules/eslint/messages/plugin-invalid.js +1 -1
  190. data/node_modules/eslint/messages/plugin-missing.js +1 -1
  191. data/node_modules/eslint/package.json +32 -29
  192. data/node_modules/eslint-scope/README.md +23 -2
  193. data/node_modules/eslint-scope/dist/eslint-scope.cjs +84 -58
  194. data/node_modules/eslint-scope/lib/index.js +0 -3
  195. data/node_modules/eslint-scope/lib/pattern-visitor.js +4 -3
  196. data/node_modules/eslint-scope/lib/referencer.js +13 -11
  197. data/node_modules/eslint-scope/lib/scope-manager.js +2 -8
  198. data/node_modules/eslint-scope/lib/scope.js +64 -43
  199. data/node_modules/eslint-scope/lib/version.js +1 -1
  200. data/node_modules/eslint-scope/package.json +21 -19
  201. data/node_modules/eslint-visitor-keys/README.md +1 -1
  202. data/node_modules/eslint-visitor-keys/package.json +2 -2
  203. data/node_modules/espree/README.md +1 -1
  204. data/node_modules/espree/dist/espree.cjs +1 -1
  205. data/node_modules/espree/lib/version.js +1 -1
  206. data/node_modules/espree/package.json +18 -20
  207. data/node_modules/file-entry-cache/LICENSE +1 -1
  208. data/node_modules/file-entry-cache/README.md +6 -3
  209. data/node_modules/file-entry-cache/package.json +19 -43
  210. data/node_modules/flat-cache/README.md +8 -6
  211. data/node_modules/flat-cache/changelog.md +155 -205
  212. data/node_modules/flat-cache/package.json +16 -39
  213. data/node_modules/flat-cache/src/cache.js +22 -26
  214. data/node_modules/flat-cache/src/del.js +28 -11
  215. data/node_modules/flat-cache/src/utils.js +39 -41
  216. data/node_modules/globals/globals.json +25 -0
  217. data/node_modules/globals/index.d.ts +2074 -3
  218. data/node_modules/globals/package.json +10 -7
  219. data/node_modules/globals/readme.md +2 -14
  220. data/node_modules/keyv/package.json +4 -4
  221. data/node_modules/keyv/src/index.js +6 -11
  222. data/node_modules/npm-check-updates/build/cli.js +22 -21
  223. data/node_modules/npm-check-updates/build/cli.js.map +1 -1
  224. data/node_modules/npm-check-updates/build/index-5sFb3Tvv.js +66 -0
  225. data/node_modules/npm-check-updates/build/index-5sFb3Tvv.js.map +1 -0
  226. data/node_modules/npm-check-updates/build/index-BmUFwMVL.js +6 -0
  227. data/node_modules/npm-check-updates/build/index-BmUFwMVL.js.map +1 -0
  228. data/node_modules/npm-check-updates/build/index.d.ts +5 -2
  229. data/node_modules/npm-check-updates/build/index.js +560 -1
  230. data/node_modules/npm-check-updates/build/index.js.map +1 -1
  231. data/node_modules/npm-check-updates/build/package.json +4 -3
  232. data/node_modules/npm-check-updates/build/src/index.js +1 -1
  233. data/node_modules/npm-check-updates/build/src/index.js.map +1 -1
  234. data/node_modules/npm-check-updates/build/src/lib/libnpmconfig/index.js +2 -2
  235. data/node_modules/npm-check-updates/build/src/lib/libnpmconfig/index.js.map +1 -1
  236. data/node_modules/npm-check-updates/build/src/package-managers/bun.js +0 -6
  237. data/node_modules/npm-check-updates/build/src/package-managers/bun.js.map +1 -1
  238. data/node_modules/npm-check-updates/package.json +4 -3
  239. data/node_modules/type-fest/index.d.ts +95 -2
  240. data/node_modules/type-fest/package.json +12 -18
  241. data/node_modules/type-fest/readme.md +299 -52
  242. data/node_modules/type-fest/source/async-return-type.d.ts +4 -2
  243. data/node_modules/type-fest/source/asyncify.d.ts +5 -3
  244. data/node_modules/type-fest/source/basic.d.ts +21 -43
  245. data/node_modules/type-fest/{ts41 → source}/camel-case.d.ts +18 -17
  246. data/node_modules/type-fest/source/camel-cased-properties-deep.d.ts +54 -0
  247. data/node_modules/type-fest/source/camel-cased-properties.d.ts +36 -0
  248. data/node_modules/type-fest/source/conditional-except.d.ts +6 -4
  249. data/node_modules/type-fest/source/conditional-keys.d.ts +5 -1
  250. data/node_modules/type-fest/source/conditional-pick.d.ts +5 -3
  251. data/node_modules/type-fest/{ts41 → source}/delimiter-case.d.ts +16 -8
  252. data/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts +60 -0
  253. data/node_modules/type-fest/source/delimiter-cased-properties.d.ts +37 -0
  254. data/node_modules/type-fest/source/entries.d.ts +8 -3
  255. data/node_modules/type-fest/source/entry.d.ts +8 -3
  256. data/node_modules/type-fest/source/exact.d.ts +73 -0
  257. data/node_modules/type-fest/source/except.d.ts +38 -3
  258. data/node_modules/type-fest/source/fixed-length-array.d.ts +6 -1
  259. data/node_modules/type-fest/source/get.d.ts +184 -0
  260. data/node_modules/type-fest/source/has-optional-keys.d.ts +21 -0
  261. data/node_modules/type-fest/source/has-required-keys.d.ts +59 -0
  262. data/node_modules/type-fest/source/includes.d.ts +22 -0
  263. data/node_modules/type-fest/source/internal.d.ts +59 -0
  264. data/node_modules/type-fest/source/invariant-of.d.ts +76 -0
  265. data/node_modules/type-fest/source/iterable-element.d.ts +8 -0
  266. data/node_modules/type-fest/source/join.d.ts +30 -0
  267. data/node_modules/type-fest/source/jsonify.d.ts +90 -0
  268. data/node_modules/type-fest/{ts41 → source}/kebab-case.d.ts +7 -5
  269. data/node_modules/type-fest/source/kebab-cased-properties-deep.d.ts +47 -0
  270. data/node_modules/type-fest/source/kebab-cased-properties.d.ts +30 -0
  271. data/node_modules/type-fest/source/last-array-element.d.ts +28 -0
  272. data/node_modules/type-fest/source/literal-to-primitive.d.ts +36 -0
  273. data/node_modules/type-fest/source/literal-union.d.ts +7 -5
  274. data/node_modules/type-fest/source/merge-exclusive.d.ts +3 -1
  275. data/node_modules/type-fest/source/merge.d.ts +8 -3
  276. data/node_modules/type-fest/source/multidimensional-array.d.ts +43 -0
  277. data/node_modules/type-fest/source/multidimensional-readonly-array.d.ts +47 -0
  278. data/node_modules/type-fest/source/mutable.d.ts +4 -21
  279. data/node_modules/type-fest/source/numeric.d.ts +170 -0
  280. data/node_modules/type-fest/source/observable-like.d.ts +62 -0
  281. data/node_modules/type-fest/source/opaque.d.ts +45 -3
  282. data/node_modules/type-fest/source/optional-keys-of.d.ts +38 -0
  283. data/node_modules/type-fest/source/package-json.d.ts +64 -12
  284. data/node_modules/type-fest/source/partial-deep.d.ts +57 -16
  285. data/node_modules/type-fest/source/partial-on-undefined-deep.d.ts +70 -0
  286. data/node_modules/type-fest/{ts41 → source}/pascal-case.d.ts +6 -4
  287. data/node_modules/type-fest/source/pascal-cased-properties-deep.d.ts +54 -0
  288. data/node_modules/type-fest/source/pascal-cased-properties.d.ts +34 -0
  289. data/node_modules/type-fest/source/primitive.d.ts +13 -0
  290. data/node_modules/type-fest/source/promisable.d.ts +5 -3
  291. data/node_modules/type-fest/source/promise-value.d.ts +9 -7
  292. data/node_modules/type-fest/source/readonly-deep.d.ts +33 -7
  293. data/node_modules/type-fest/source/readonly-tuple.d.ts +41 -0
  294. data/node_modules/type-fest/source/remove-index-signature.d.ts +104 -0
  295. data/node_modules/type-fest/source/replace.d.ts +67 -0
  296. data/node_modules/type-fest/source/require-all-or-none.d.ts +36 -0
  297. data/node_modules/type-fest/source/require-at-least-one.d.ts +5 -3
  298. data/node_modules/type-fest/source/require-exactly-one.d.ts +4 -5
  299. data/node_modules/type-fest/source/required-keys-of.d.ts +29 -0
  300. data/node_modules/type-fest/source/schema.d.ts +72 -0
  301. data/node_modules/type-fest/source/screaming-snake-case.d.ts +33 -0
  302. data/node_modules/type-fest/source/set-non-nullable.d.ts +35 -0
  303. data/node_modules/type-fest/source/set-optional.d.ts +12 -11
  304. data/node_modules/type-fest/source/set-required.d.ts +12 -11
  305. data/node_modules/type-fest/source/set-return-type.d.ts +3 -1
  306. data/node_modules/type-fest/source/simplify.d.ts +83 -0
  307. data/node_modules/type-fest/{ts41 → source}/snake-case.d.ts +7 -4
  308. data/node_modules/type-fest/source/snake-cased-properties-deep.d.ts +47 -0
  309. data/node_modules/type-fest/source/snake-cased-properties.d.ts +30 -0
  310. data/node_modules/type-fest/source/split.d.ts +29 -0
  311. data/node_modules/type-fest/source/spread.d.ts +85 -0
  312. data/node_modules/type-fest/source/string-key-of.d.ts +25 -0
  313. data/node_modules/type-fest/source/stringified.d.ts +3 -1
  314. data/node_modules/type-fest/source/trim.d.ts +25 -0
  315. data/node_modules/type-fest/source/tsconfig-json.d.ts +316 -14
  316. data/node_modules/type-fest/source/typed-array.d.ts +17 -0
  317. data/node_modules/type-fest/source/union-to-intersection.d.ts +4 -2
  318. data/node_modules/type-fest/source/value-of.d.ts +3 -1
  319. data/node_modules/type-fest/source/writable.d.ts +40 -0
  320. data/package.json +2 -2
  321. metadata +86 -63
  322. data/linters/rubocop-2.7.6.yml +0 -86
  323. data/node_modules/@humanwhocodes/object-schema/tests/merge-strategy.js +0 -66
  324. data/node_modules/@humanwhocodes/object-schema/tests/object-schema.js +0 -659
  325. data/node_modules/@humanwhocodes/object-schema/tests/validation-strategy.js +0 -186
  326. data/node_modules/eslint/conf/config-schema.js +0 -93
  327. data/node_modules/eslint/lib/cli-engine/formatters/checkstyle.js +0 -60
  328. data/node_modules/eslint/lib/cli-engine/formatters/compact.js +0 -60
  329. data/node_modules/eslint/lib/cli-engine/formatters/jslint-xml.js +0 -41
  330. data/node_modules/eslint/lib/cli-engine/formatters/junit.js +0 -82
  331. data/node_modules/eslint/lib/cli-engine/formatters/tap.js +0 -95
  332. data/node_modules/eslint/lib/cli-engine/formatters/unix.js +0 -58
  333. data/node_modules/eslint/lib/cli-engine/formatters/visualstudio.js +0 -63
  334. data/node_modules/eslint/lib/cli-engine/xml-escape.js +0 -34
  335. data/node_modules/eslint/lib/eslint/flat-eslint.js +0 -1155
  336. data/node_modules/eslint/lib/rule-tester/flat-rule-tester.js +0 -1131
  337. data/node_modules/eslint/lib/rules/require-jsdoc.js +0 -122
  338. data/node_modules/eslint/lib/rules/utils/patterns/letters.js +0 -36
  339. data/node_modules/eslint/lib/rules/valid-jsdoc.js +0 -516
  340. data/node_modules/eslint/lib/shared/config-validator.js +0 -347
  341. data/node_modules/eslint/lib/shared/deprecation-warnings.js +0 -58
  342. data/node_modules/eslint/lib/shared/relative-module-resolver.js +0 -50
  343. data/node_modules/file-entry-cache/changelog.md +0 -163
  344. data/node_modules/flat-cache/node_modules/rimraf/CHANGELOG.md +0 -65
  345. data/node_modules/flat-cache/node_modules/rimraf/LICENSE +0 -15
  346. data/node_modules/flat-cache/node_modules/rimraf/README.md +0 -101
  347. data/node_modules/flat-cache/node_modules/rimraf/bin.js +0 -68
  348. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/LICENSE +0 -21
  349. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/README.md +0 -378
  350. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/common.js +0 -238
  351. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/glob.js +0 -790
  352. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/LICENSE +0 -15
  353. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/README.md +0 -230
  354. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/minimatch.js +0 -947
  355. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/LICENSE +0 -21
  356. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md +0 -129
  357. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js +0 -201
  358. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json +0 -47
  359. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json +0 -33
  360. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/package.json +0 -55
  361. data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/sync.js +0 -486
  362. data/node_modules/flat-cache/node_modules/rimraf/package.json +0 -32
  363. data/node_modules/flat-cache/node_modules/rimraf/rimraf.js +0 -360
  364. data/node_modules/npm-check-updates/build/index-CI_x-D21.js +0 -593
  365. data/node_modules/npm-check-updates/build/index-CI_x-D21.js.map +0 -1
  366. data/node_modules/npm-check-updates/build/index-Ci8A2QXv.js +0 -6
  367. data/node_modules/npm-check-updates/build/index-Ci8A2QXv.js.map +0 -1
  368. data/node_modules/npm-check-updates/build/index-DgVn3Gax.js +0 -36
  369. data/node_modules/npm-check-updates/build/index-DgVn3Gax.js.map +0 -1
  370. data/node_modules/npm-check-updates/build/src/types/SpawnPleaseOptions.d.ts +0 -6
  371. data/node_modules/npm-check-updates/build/src/types/SpawnPleaseOptions.js +0 -3
  372. data/node_modules/npm-check-updates/build/src/types/SpawnPleaseOptions.js.map +0 -1
  373. data/node_modules/type-fest/base.d.ts +0 -38
  374. data/node_modules/type-fest/license +0 -9
  375. data/node_modules/type-fest/source/utilities.d.ts +0 -3
  376. data/node_modules/type-fest/ts41/index.d.ts +0 -9
@@ -1,13 +1,44 @@
1
+ import type {IsEqual} from './internal';
2
+
3
+ /**
4
+ Filter out keys from an object.
5
+
6
+ Returns `never` if `Exclude` is strictly equal to `Key`.
7
+ Returns `never` if `Key` extends `Exclude`.
8
+ Returns `Key` otherwise.
9
+
10
+ @example
11
+ ```
12
+ type Filtered = Filter<'foo', 'foo'>;
13
+ //=> never
14
+ ```
15
+
16
+ @example
17
+ ```
18
+ type Filtered = Filter<'bar', string>;
19
+ //=> never
20
+ ```
21
+
22
+ @example
23
+ ```
24
+ type Filtered = Filter<'bar', 'foo'>;
25
+ //=> 'bar'
26
+ ```
27
+
28
+ @see {Except}
29
+ */
30
+ type Filter<KeyType, ExcludeType> = IsEqual<KeyType, ExcludeType> extends true ? never : (KeyType extends ExcludeType ? never : KeyType);
31
+
1
32
  /**
2
33
  Create a type from an object type without certain keys.
3
34
 
4
35
  This type is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). The `Omit` type does not restrict the omitted keys to be keys present on the given type, while `Except` does. The benefits of a stricter type are avoiding typos and allowing the compiler to pick up on rename refactors automatically.
5
36
 
6
- Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/30825) if you want to have the stricter version as a built-in in TypeScript.
37
+ This type was proposed to the TypeScript team, which declined it, saying they prefer that libraries implement stricter versions of the built-in types ([microsoft/TypeScript#30825](https://github.com/microsoft/TypeScript/issues/30825#issuecomment-523668235)).
7
38
 
8
39
  @example
9
40
  ```
10
- import {Except} from 'type-fest';
41
+ import type {Except} from 'type-fest';
11
42
 
12
43
  type Foo = {
13
44
  a: number;
@@ -18,5 +49,9 @@ type Foo = {
18
49
  type FooWithoutA = Except<Foo, 'a' | 'c'>;
19
50
  //=> {b: string};
20
51
  ```
52
+
53
+ @category Object
21
54
  */
22
- export type Except<ObjectType, KeysType extends keyof ObjectType> = Pick<ObjectType, Exclude<keyof ObjectType, KeysType>>;
55
+ export type Except<ObjectType, KeysType extends keyof ObjectType> = {
56
+ [KeyType in keyof ObjectType as Filter<KeyType, KeysType>]: ObjectType[KeyType];
57
+ };
@@ -13,9 +13,11 @@ Use-cases:
13
13
  - Creating a range union (for example, `0 | 1 | 2 | 3 | 4` from the keys of such a type) without having to resort to recursive types.
14
14
  - Creating an array of coordinates with a static length, for example, length of 3 for a 3D vector.
15
15
 
16
+ Note: This type does not prevent out-of-bounds access. Prefer `ReadonlyTuple` unless you need mutability.
17
+
16
18
  @example
17
19
  ```
18
- import {FixedLengthArray} from 'type-fest';
20
+ import type {FixedLengthArray} from 'type-fest';
19
21
 
20
22
  type FencingTeam = FixedLengthArray<string, 3>;
21
23
 
@@ -27,6 +29,9 @@ const homeFencingTeam: FencingTeam = ['George', 'John'];
27
29
  guestFencingTeam.push('Sam');
28
30
  //=> error TS2339: Property 'push' does not exist on type 'FencingTeam'
29
31
  ```
32
+
33
+ @category Array
34
+ @see ReadonlyTuple
30
35
  */
31
36
  export type FixedLengthArray<Element, Length extends number, ArrayPrototype = [Element, ...Element[]]> = Pick<
32
37
  ArrayPrototype,
@@ -0,0 +1,184 @@
1
+ import type {StringDigit} from '../source/internal';
2
+ import type {Split} from './split';
3
+ import type {StringKeyOf} from './string-key-of';
4
+
5
+ type GetOptions = {
6
+ strict?: boolean;
7
+ };
8
+
9
+ /**
10
+ Like the `Get` type but receives an array of strings as a path parameter.
11
+ */
12
+ type GetWithPath<BaseType, Keys extends readonly string[], Options extends GetOptions = {}> =
13
+ Keys extends []
14
+ ? BaseType
15
+ : Keys extends readonly [infer Head, ...infer Tail]
16
+ ? GetWithPath<
17
+ PropertyOf<BaseType, Extract<Head, string>, Options>,
18
+ Extract<Tail, string[]>,
19
+ Options
20
+ >
21
+ : never;
22
+
23
+ /**
24
+ Adds `undefined` to `Type` if `strict` is enabled.
25
+ */
26
+ type Strictify<Type, Options extends GetOptions> =
27
+ Options['strict'] extends true ? Type | undefined : Type;
28
+
29
+ /**
30
+ If `Options['strict']` is `true`, includes `undefined` in the returned type when accessing properties on `Record<string, any>`.
31
+
32
+ Known limitations:
33
+ - Does not include `undefined` in the type on object types with an index signature (for example, `{a: string; [key: string]: string}`).
34
+ */
35
+ type StrictPropertyOf<BaseType, Key extends keyof BaseType, Options extends GetOptions> =
36
+ Record<string, any> extends BaseType
37
+ ? string extends keyof BaseType
38
+ ? Strictify<BaseType[Key], Options> // Record<string, any>
39
+ : BaseType[Key] // Record<'a' | 'b', any> (Records with a string union as keys have required properties)
40
+ : BaseType[Key];
41
+
42
+ /**
43
+ Splits a dot-prop style path into a tuple comprised of the properties in the path. Handles square-bracket notation.
44
+
45
+ @example
46
+ ```
47
+ ToPath<'foo.bar.baz'>
48
+ //=> ['foo', 'bar', 'baz']
49
+
50
+ ToPath<'foo[0].bar.baz'>
51
+ //=> ['foo', '0', 'bar', 'baz']
52
+ ```
53
+ */
54
+ type ToPath<S extends string> = Split<FixPathSquareBrackets<S>, '.'>;
55
+
56
+ /**
57
+ Replaces square-bracketed dot notation with dots, for example, `foo[0].bar` -> `foo.0.bar`.
58
+ */
59
+ type FixPathSquareBrackets<Path extends string> =
60
+ Path extends `[${infer Head}]${infer Tail}`
61
+ ? Tail extends `[${string}`
62
+ ? `${Head}.${FixPathSquareBrackets<Tail>}`
63
+ : `${Head}${FixPathSquareBrackets<Tail>}`
64
+ : Path extends `${infer Head}[${infer Middle}]${infer Tail}`
65
+ ? `${Head}.${FixPathSquareBrackets<`[${Middle}]${Tail}`>}`
66
+ : Path;
67
+
68
+ /**
69
+ Returns true if `LongString` is made up out of `Substring` repeated 0 or more times.
70
+
71
+ @example
72
+ ```
73
+ ConsistsOnlyOf<'aaa', 'a'> //=> true
74
+ ConsistsOnlyOf<'ababab', 'ab'> //=> true
75
+ ConsistsOnlyOf<'aBa', 'a'> //=> false
76
+ ConsistsOnlyOf<'', 'a'> //=> true
77
+ ```
78
+ */
79
+ type ConsistsOnlyOf<LongString extends string, Substring extends string> =
80
+ LongString extends ''
81
+ ? true
82
+ : LongString extends `${Substring}${infer Tail}`
83
+ ? ConsistsOnlyOf<Tail, Substring>
84
+ : false;
85
+
86
+ /**
87
+ Convert a type which may have number keys to one with string keys, making it possible to index using strings retrieved from template types.
88
+
89
+ @example
90
+ ```
91
+ type WithNumbers = {foo: string; 0: boolean};
92
+ type WithStrings = WithStringKeys<WithNumbers>;
93
+
94
+ type WithNumbersKeys = keyof WithNumbers;
95
+ //=> 'foo' | 0
96
+ type WithStringsKeys = keyof WithStrings;
97
+ //=> 'foo' | '0'
98
+ ```
99
+ */
100
+ type WithStringKeys<BaseType> = {
101
+ [Key in StringKeyOf<BaseType>]: UncheckedIndex<BaseType, Key>
102
+ };
103
+
104
+ /**
105
+ Perform a `T[U]` operation if `T` supports indexing.
106
+ */
107
+ type UncheckedIndex<T, U extends string | number> = [T] extends [Record<string | number, any>] ? T[U] : never;
108
+
109
+ /**
110
+ Get a property of an object or array. Works when indexing arrays using number-literal-strings, for example, `PropertyOf<number[], '0'> = number`, and when indexing objects with number keys.
111
+
112
+ Note:
113
+ - Returns `unknown` if `Key` is not a property of `BaseType`, since TypeScript uses structural typing, and it cannot be guaranteed that extra properties unknown to the type system will exist at runtime.
114
+ - Returns `undefined` from nullish values, to match the behaviour of most deep-key libraries like `lodash`, `dot-prop`, etc.
115
+ */
116
+ type PropertyOf<BaseType, Key extends string, Options extends GetOptions = {}> =
117
+ BaseType extends null | undefined
118
+ ? undefined
119
+ : Key extends keyof BaseType
120
+ ? StrictPropertyOf<BaseType, Key, Options>
121
+ : BaseType extends [] | [unknown, ...unknown[]]
122
+ ? unknown // It's a tuple, but `Key` did not extend `keyof BaseType`. So the index is out of bounds.
123
+ : BaseType extends {
124
+ [n: number]: infer Item;
125
+ length: number; // Note: This is needed to avoid being too lax with records types using number keys like `{0: string; 1: boolean}`.
126
+ }
127
+ ? (
128
+ ConsistsOnlyOf<Key, StringDigit> extends true
129
+ ? Strictify<Item, Options>
130
+ : unknown
131
+ )
132
+ : Key extends keyof WithStringKeys<BaseType>
133
+ ? StrictPropertyOf<WithStringKeys<BaseType>, Key, Options>
134
+ : unknown;
135
+
136
+ // This works by first splitting the path based on `.` and `[...]` characters into a tuple of string keys. Then it recursively uses the head key to get the next property of the current object, until there are no keys left. Number keys extract the item type from arrays, or are converted to strings to extract types from tuples and dictionaries with number keys.
137
+ /**
138
+ Get a deeply-nested property from an object using a key path, like Lodash's `.get()` function.
139
+
140
+ Use-case: Retrieve a property from deep inside an API response or some other complex object.
141
+
142
+ @example
143
+ ```
144
+ import type {Get} from 'type-fest';
145
+ import * as lodash from 'lodash';
146
+
147
+ const get = <BaseType, Path extends string | readonly string[]>(object: BaseType, path: Path): Get<BaseType, Path> =>
148
+ lodash.get(object, path);
149
+
150
+ interface ApiResponse {
151
+ hits: {
152
+ hits: Array<{
153
+ _id: string
154
+ _source: {
155
+ name: Array<{
156
+ given: string[]
157
+ family: string
158
+ }>
159
+ birthDate: string
160
+ }
161
+ }>
162
+ }
163
+ }
164
+
165
+ const getName = (apiResponse: ApiResponse) =>
166
+ get(apiResponse, 'hits.hits[0]._source.name');
167
+ //=> Array<{given: string[]; family: string}>
168
+
169
+ // Path also supports a readonly array of strings
170
+ const getNameWithPathArray = (apiResponse: ApiResponse) =>
171
+ get(apiResponse, ['hits','hits', '0', '_source', 'name'] as const);
172
+ //=> Array<{given: string[]; family: string}>
173
+
174
+ // Strict mode:
175
+ Get<string[], '3', {strict: true}> //=> string | undefined
176
+ Get<Record<string, string>, 'foo', {strict: true}> // => string | undefined
177
+ ```
178
+
179
+ @category Object
180
+ @category Array
181
+ @category Template literal
182
+ */
183
+ export type Get<BaseType, Path extends string | readonly string[], Options extends GetOptions = {}> =
184
+ GetWithPath<BaseType, Path extends string ? ToPath<Path> : Path, Options>;
@@ -0,0 +1,21 @@
1
+ import {OptionalKeysOf} from './optional-keys-of';
2
+
3
+ /**
4
+ Creates a type that represents `true` or `false` depending on whether the given type has any optional fields.
5
+
6
+ This is useful when you want to create an API whose behavior depends on the presence or absence of optional fields.
7
+
8
+ @example
9
+ ```
10
+ import type {HasOptionalKeys, OptionalKeysOf} from 'type-fest';
11
+
12
+ type UpdateService<Entity extends object> = {
13
+ removeField: HasOptionalKeys<Entity> extends true
14
+ ? (field: OptionalKeysOf<Entity>) => Promise<void>
15
+ : never
16
+ }
17
+ ```
18
+
19
+ @category Utilities
20
+ */
21
+ export type HasOptionalKeys<BaseType extends object> = OptionalKeysOf<BaseType> extends never ? false : true;
@@ -0,0 +1,59 @@
1
+ import {RequiredKeysOf} from './required-keys-of';
2
+
3
+ /**
4
+ Creates a type that represents `true` or `false` depending on whether the given type has any required fields.
5
+
6
+ This is useful when you want to create an API whose behavior depends on the presence or absence of required fields.
7
+
8
+ @example
9
+ ```
10
+ import type {HasRequiredKeys} from 'type-fest';
11
+
12
+ type GeneratorOptions<Template extends object> = {
13
+ prop1: number;
14
+ prop2: string;
15
+ } & (HasRequiredKeys<Template> extends true
16
+ ? {template: Template}
17
+ : {template?: Template});
18
+
19
+ interface Template1 {
20
+ optionalSubParam?: string;
21
+ }
22
+
23
+ interface Template2 {
24
+ requiredSubParam: string;
25
+ }
26
+
27
+ type Options1 = GeneratorOptions<Template1>;
28
+ type Options2 = GeneratorOptions<Template2>;
29
+
30
+ const optA: Options1 = {
31
+ prop1: 0,
32
+ prop2: 'hi'
33
+ };
34
+ const optB: Options1 = {
35
+ prop1: 0,
36
+ prop2: 'hi',
37
+ template: {}
38
+ };
39
+ const optC: Options1 = {
40
+ prop1: 0,
41
+ prop2: 'hi',
42
+ template: {
43
+ optionalSubParam: 'optional value'
44
+ }
45
+ };
46
+
47
+ const optD: Options2 = {
48
+ prop1: 0,
49
+ prop2: 'hi',
50
+ template: {
51
+ requiredSubParam: 'required value'
52
+ }
53
+ };
54
+
55
+ ```
56
+
57
+ @category Utilities
58
+ */
59
+ export type HasRequiredKeys<BaseType extends object> = RequiredKeysOf<BaseType> extends never ? false : true;
@@ -0,0 +1,22 @@
1
+ import type {IsEqual} from './internal';
2
+
3
+ /**
4
+ Returns a boolean for whether the given array includes the given item.
5
+
6
+ This can be useful if another type wants to make a decision based on whether the array includes that item.
7
+
8
+ @example
9
+ ```
10
+ import type {Includes} from 'type-fest';
11
+
12
+ type hasRed<array extends any[]> = Includes<array, 'red'>;
13
+ ```
14
+
15
+ @category Array
16
+ */
17
+ export type Includes<Value extends readonly any[], Item> =
18
+ Value extends readonly [Value[0], ...infer rest]
19
+ ? IsEqual<Value[0], Item> extends true
20
+ ? true
21
+ : Includes<rest, Item>
22
+ : false;
@@ -0,0 +1,59 @@
1
+ import type {Primitive} from './primitive';
2
+
3
+ /**
4
+ Returns a boolean for whether the two given types are equal.
5
+
6
+ @link https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650
7
+ @link https://stackoverflow.com/questions/68961864/how-does-the-equals-work-in-typescript/68963796#68963796
8
+ */
9
+ export type IsEqual<T, U> =
10
+ (<G>() => G extends T ? 1 : 2) extends
11
+ (<G>() => G extends U ? 1 : 2)
12
+ ? true
13
+ : false;
14
+
15
+ /**
16
+ Infer the length of the given array `<T>`.
17
+
18
+ @link https://itnext.io/implementing-arithmetic-within-typescripts-type-system-a1ef140a6f6f
19
+ */
20
+ type TupleLength<T extends readonly unknown[]> = T extends {readonly length: infer L} ? L : never;
21
+
22
+ /**
23
+ Create a tuple type of the given length `<L>`.
24
+
25
+ @link https://itnext.io/implementing-arithmetic-within-typescripts-type-system-a1ef140a6f6f
26
+ */
27
+ type BuildTuple<L extends number, T extends readonly unknown[] = []> = T extends {readonly length: L}
28
+ ? T
29
+ : BuildTuple<L, [...T, unknown]>;
30
+
31
+ /**
32
+ Create a tuple of length `A` and a tuple composed of two other tuples,
33
+ the inferred tuple `U` and a tuple of length `B`, then extracts the length of tuple `U`.
34
+
35
+ @link https://itnext.io/implementing-arithmetic-within-typescripts-type-system-a1ef140a6f6f
36
+ */
37
+ export type Subtract<A extends number, B extends number> = BuildTuple<A> extends [...(infer U), ...BuildTuple<B>]
38
+ ? TupleLength<U>
39
+ : never;
40
+
41
+ /**
42
+ Matches any primitive, `Date`, or `RegExp` value.
43
+ */
44
+ export type BuiltIns = Primitive | Date | RegExp;
45
+
46
+ /**
47
+ Gets keys from a type. Similar to `keyof` but this one also works for union types.
48
+
49
+ The reason a simple `keyof Union` does not work is because `keyof` always returns the accessible keys of a type. In the case of a union, that will only be the common keys.
50
+
51
+ @link https://stackoverflow.com/a/49402091
52
+ */
53
+ export type KeysOfUnion<T> = T extends T ? keyof T : never;
54
+
55
+ export type UpperCaseCharacters = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z';
56
+
57
+ export type WordSeparators = '-' | '_' | ' ';
58
+
59
+ export type StringDigit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
@@ -0,0 +1,76 @@
1
+ import type {Opaque} from './opaque';
2
+
3
+ /**
4
+ Create an [invariant type](https://basarat.gitbook.io/typescript/type-system/type-compatibility#footnote-invariance), which is a type that does not accept supertypes and subtypes.
5
+
6
+ Use-case:
7
+ - Prevent runtime errors that may occur due to assigning subtypes to supertypes.
8
+ - Improve type signature of object methods like [`Object.keys()` or `Object.entries()`](https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208) by sealing the object type.
9
+
10
+ @example
11
+ ```
12
+ import type {InvariantOf} from 'type-fest';
13
+
14
+ class Animal {
15
+ constructor(public name: string){}
16
+ }
17
+
18
+ class Cat extends Animal {
19
+ meow() {}
20
+ }
21
+
22
+ let animalArray: Animal[] = [animal];
23
+ let catArray: Cat[] = [cat];
24
+
25
+ animalArray = catArray; // Okay if covariant
26
+ animalArray.push(new Animal('another animal')); // Pushed an animal into catArray
27
+ catArray.forEach(c => c.meow()); // Allowed but, error at runtime
28
+
29
+ let invariantAnimalArray: InvariantOf<Animal>[] = [animal] as InvariantOf<Animal>[];
30
+ let invariantCatArray: InvariantOf<Cat>[] = [cat] as InvariantOf<Cat>[];
31
+
32
+ invariantAnimalArray = invariantCatArray; // Error: Type 'InvariantOf<Cat>[]' is not assignable to type 'InvariantOf<Animal>[]'.
33
+ ```
34
+
35
+ @example
36
+ ```
37
+ import type {InvariantOf} from 'type-fest';
38
+
39
+ // In covariance (default)
40
+
41
+ interface FooBar {
42
+ foo: number;
43
+ bar: string
44
+ }
45
+
46
+ interface FooBarBaz extends FooBar {
47
+ baz: boolean
48
+ }
49
+
50
+ declare const fooBar: FooBar
51
+ declare const fooBarBaz: FooBarBaz
52
+
53
+ function keyOfFooBar(fooBar: FooBar) {
54
+ return Object.keys(fooBar) as (keyof FooBar)[]
55
+ }
56
+
57
+ keyOfFooBar(fooBar) //=> (keyof FooBar)[]
58
+ keyOfFooBar(fooBarBaz) //=> (keyof FooBar)[] but, (keyof FooBarBaz)[] at runtime
59
+
60
+ // In invariance
61
+
62
+ export function invariantOf<Type>(value: Type): InvariantOf<Type> {
63
+ return value as InvariantOf<Type>;
64
+ }
65
+
66
+ function keyOfInvariantFooBar(fooBar: InvariantOf<FooBar>) {
67
+ return Object.keys(fooBar) as (keyof FooBar)[]
68
+ }
69
+
70
+ keyOfInvariantFooBar(invariantOf(fooBar)); // (keyof FooBar)[]
71
+ keyOfInvariantFooBar(invariantOf(fooBarBaz)); // Error: Argument of type 'InvariantOf<FooBarBaz>' is not assignable to parameter of type 'InvariantOf<FooBar>'.
72
+ ```
73
+
74
+ @category Type
75
+ */
76
+ export type InvariantOf<Type> = Opaque<Type, (argument: Type) => Type>;
@@ -9,6 +9,8 @@ Here is an example of `IterableElement` in action with a generator function:
9
9
 
10
10
  @example
11
11
  ```
12
+ import type {IterableElement} from 'type-fest';
13
+
12
14
  function * iAmGenerator() {
13
15
  yield 1;
14
16
  yield 2;
@@ -21,6 +23,8 @@ And here is an example with an async generator:
21
23
 
22
24
  @example
23
25
  ```
26
+ import type {IterableElement} from 'type-fest';
27
+
24
28
  async function * iAmGeneratorAsync() {
25
29
  yield 'hi';
26
30
  yield true;
@@ -35,8 +39,12 @@ An example with an array of strings:
35
39
 
36
40
  @example
37
41
  ```
42
+ import type {IterableElement} from 'type-fest';
43
+
38
44
  type MeString = IterableElement<string[]>
39
45
  ```
46
+
47
+ @category Iterable
40
48
  */
41
49
  export type IterableElement<TargetIterable> =
42
50
  TargetIterable extends Iterable<infer ElementType> ?
@@ -0,0 +1,30 @@
1
+ /**
2
+ Join an array of strings and/or numbers using the given string as a delimiter.
3
+
4
+ Use-case: Defining key paths in a nested object. For example, for dot-notation fields in MongoDB queries.
5
+
6
+ @example
7
+ ```
8
+ import type {Join} from 'type-fest';
9
+
10
+ // Mixed (strings & numbers) items; result is: 'foo.0.baz'
11
+ const path: Join<['foo', 0, 'baz'], '.'> = ['foo', 0, 'baz'].join('.');
12
+
13
+ // Only string items; result is: 'foo.bar.baz'
14
+ const path: Join<['foo', 'bar', 'baz'], '.'> = ['foo', 'bar', 'baz'].join('.');
15
+
16
+ // Only number items; result is: '1.2.3'
17
+ const path: Join<[1, 2, 3], '.'> = [1, 2, 3].join('.');
18
+ ```
19
+
20
+ @category Array
21
+ @category Template literal
22
+ */
23
+ export type Join<
24
+ Strings extends Array<string | number>,
25
+ Delimiter extends string,
26
+ > = Strings extends [] ? '' :
27
+ Strings extends [string | number] ? `${Strings[0]}` :
28
+ // @ts-expect-error `Rest` is inferred as `unknown` here: https://github.com/microsoft/TypeScript/issues/45281
29
+ Strings extends [string | number, ...infer Rest] ? `${Strings[0]}${Delimiter}${Join<Rest, Delimiter>}` :
30
+ string;
@@ -0,0 +1,90 @@
1
+ import type {JsonPrimitive, JsonValue} from './basic';
2
+ import {Finite, NegativeInfinity, PositiveInfinity} from './numeric';
3
+ import {TypedArray} from './typed-array';
4
+
5
+ // Note: The return value has to be `any` and not `unknown` so it can match `void`.
6
+ type NotJsonable = ((...args: any[]) => any) | undefined | symbol;
7
+
8
+ /**
9
+ Transform a type to one that is assignable to the `JsonValue` type.
10
+
11
+ This includes:
12
+ 1. Transforming JSON `interface` to a `type` that is assignable to `JsonValue`.
13
+ 2. Transforming non-JSON value that is *jsonable* to a type that is assignable to `JsonValue`, where *jsonable* means the non-JSON value implements the `.toJSON()` method that returns a value that is assignable to `JsonValue`.
14
+
15
+ @remarks
16
+
17
+ An interface cannot be structurally compared to `JsonValue` because an interface can be re-opened to add properties that may not be satisfy `JsonValue`.
18
+
19
+ @example
20
+ ```
21
+ import type {Jsonify} from 'type-fest';
22
+
23
+ interface Geometry {
24
+ type: 'Point' | 'Polygon';
25
+ coordinates: [number, number];
26
+ }
27
+
28
+ const point: Geometry = {
29
+ type: 'Point',
30
+ coordinates: [1, 1]
31
+ };
32
+
33
+ const problemFn = (data: JsonValue) => {
34
+ // Does something with data
35
+ };
36
+
37
+ problemFn(point); // Error: type Geometry is not assignable to parameter of type JsonValue because it is an interface
38
+
39
+ const fixedFn = <T>(data: Jsonify<T>) => {
40
+ // Does something with data
41
+ };
42
+
43
+ fixedFn(point); // Good: point is assignable. Jsonify<T> transforms Geometry into value assignable to JsonValue
44
+ fixedFn(new Date()); // Error: As expected, Date is not assignable. Jsonify<T> cannot transforms Date into value assignable to JsonValue
45
+ ```
46
+
47
+ Non-JSON values such as `Date` implement `.toJSON()`, so they can be transformed to a value assignable to `JsonValue`:
48
+
49
+ @example
50
+ ```
51
+ import type {Jsonify} from 'type-fest';
52
+
53
+ const time = {
54
+ timeValue: new Date()
55
+ };
56
+
57
+ // `Jsonify<typeof time>` is equivalent to `{timeValue: string}`
58
+ const timeJson = JSON.parse(JSON.stringify(time)) as Jsonify<typeof time>;
59
+ ```
60
+
61
+ @link https://github.com/Microsoft/TypeScript/issues/1897#issuecomment-710744173
62
+
63
+ @category JSON
64
+ */
65
+ type Jsonify<T> =
66
+ // Check if there are any non-JSONable types represented in the union.
67
+ // Note: The use of tuples in this first condition side-steps distributive conditional types
68
+ // (see https://github.com/microsoft/TypeScript/issues/29368#issuecomment-453529532)
69
+ [Extract<T, NotJsonable | bigint>] extends [never]
70
+ ? T extends PositiveInfinity | NegativeInfinity ? null
71
+ : T extends JsonPrimitive ? T // Primitive is acceptable
72
+ : T extends object
73
+ // Any object with toJSON is special case
74
+ ? T extends {toJSON(): infer J} ? (() => J) extends (() => JsonValue) // Is J assignable to JsonValue?
75
+ ? J // Then T is Jsonable and its Jsonable value is J
76
+ : never // Not Jsonable because its toJSON() method does not return JsonValue
77
+ // Instanced primitives are objects
78
+ : T extends Number ? number
79
+ : T extends String ? string
80
+ : T extends Boolean ? boolean
81
+ : T extends Map<any, any> | Set<any> ? {}
82
+ : T extends TypedArray ? Record<string, number>
83
+ : T extends any[]
84
+ ? {[I in keyof T]: T[I] extends NotJsonable ? null : Jsonify<T[I]>}
85
+ : {[P in keyof T as P extends symbol ? never
86
+ : T[P] extends NotJsonable ? never
87
+ : P
88
+ ]: Jsonify<Required<T>[P]>} // Recursive call for its children
89
+ : never // Otherwise any other non-object is removed
90
+ : never; // Otherwise non-JSONable type union was found not empty