@visulima/package 3.5.2 → 3.5.4

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/CHANGELOG.md CHANGED
@@ -1,3 +1,21 @@
1
+ ## @visulima/package [3.5.4](https://github.com/visulima/visulima/compare/@visulima/package@3.5.3...@visulima/package@3.5.4) (2025-03-12)
2
+
3
+ ### Bug Fixes
4
+
5
+ * **package:** update @inquirer/confirm, @babel/core, @inquirer/core, @inquirer/type, @pnpm/exe, @rushstack/eslint-plugin-security, and eslint-plugin-mdx to latest versions ([c6ce243](https://github.com/visulima/visulima/commit/c6ce2433e6c4fad6ebe5f8b34fc2662146ccd47a))
6
+
7
+ ## @visulima/package [3.5.3](https://github.com/visulima/visulima/compare/@visulima/package@3.5.2...@visulima/package@3.5.3) (2025-03-07)
8
+
9
+ ### Bug Fixes
10
+
11
+ * updated @visulima/packem and other dev deps, for better bundling size ([e940581](https://github.com/visulima/visulima/commit/e9405812201594e54dd81d17ddb74177df5f3c24))
12
+
13
+
14
+ ### Dependencies
15
+
16
+ * **@visulima/fs:** upgraded to 3.1.2
17
+ * **@visulima/path:** upgraded to 1.3.5
18
+
1
19
  ## @visulima/package [3.5.2](https://github.com/visulima/visulima/compare/@visulima/package@3.5.1...@visulima/package@3.5.2) (2025-03-03)
2
20
 
3
21
  ### Miscellaneous Chores
package/dist/error.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
4
 
5
- const PackageNotFoundError = require('./packem_shared/PackageNotFoundError-CK1uhGFr.cjs');
5
+ const PackageNotFoundError = require('./packem_shared/PackageNotFoundError-g9G2-W3s.cjs');
6
6
 
7
7
 
8
8
 
package/dist/error.mjs CHANGED
@@ -1 +1 @@
1
- export { default as PackageNotFoundError } from './packem_shared/PackageNotFoundError-BQIw1KE1.mjs';
1
+ export { default as PackageNotFoundError } from './packem_shared/PackageNotFoundError-Ck8Sk4z9.mjs';
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
4
 
5
- const PackageNotFoundError = require('./packem_shared/PackageNotFoundError-CK1uhGFr.cjs');
5
+ const PackageNotFoundError = require('./packem_shared/PackageNotFoundError-g9G2-W3s.cjs');
6
6
  const monorepo = require('./monorepo.cjs');
7
7
  const _package = require('./package.cjs');
8
8
  const packageJson = require('./package-json.cjs');
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { PackageNotFoundError } from './error.cjs';
2
2
  export { RootMonorepo, Strategy, findMonorepoRoot, findMonorepoRootSync } from './monorepo.cjs';
3
3
  export { findPackageRoot, findPackageRootSync } from './package.cjs';
4
- export { E as EnsurePackagesOptions, F as FindPackageJsonCache, d as NormalizedPackageJson, N as NormalizedReadResult, P as PackageJson, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-z2Cyn4CW.cjs';
4
+ export { E as EnsurePackagesOptions, F as FindPackageJsonCache, d as NormalizedPackageJson, N as NormalizedReadResult, P as PackageJson, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-DvaC9k-3.cjs';
5
5
  export { PackageManager, PackageManagerResult, findLockFile, findLockFileSync, findPackageManager, findPackageManagerSync, generateMissingPackagesInstallMessage, getPackageManagerVersion, identifyInitiatingPackageManager } from './package-manager.cjs';
6
6
  import '@visulima/fs';
7
7
  import '@antfu/install-pkg';
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { PackageNotFoundError } from './error.mjs';
2
2
  export { RootMonorepo, Strategy, findMonorepoRoot, findMonorepoRootSync } from './monorepo.mjs';
3
3
  export { findPackageRoot, findPackageRootSync } from './package.mjs';
4
- export { E as EnsurePackagesOptions, F as FindPackageJsonCache, d as NormalizedPackageJson, N as NormalizedReadResult, P as PackageJson, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-z2Cyn4CW.mjs';
4
+ export { E as EnsurePackagesOptions, F as FindPackageJsonCache, d as NormalizedPackageJson, N as NormalizedReadResult, P as PackageJson, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-DvaC9k-3.mjs';
5
5
  export { PackageManager, PackageManagerResult, findLockFile, findLockFileSync, findPackageManager, findPackageManagerSync, generateMissingPackagesInstallMessage, getPackageManagerVersion, identifyInitiatingPackageManager } from './package-manager.mjs';
6
6
  import '@visulima/fs';
7
7
  import '@antfu/install-pkg';
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { PackageNotFoundError } from './error.js';
2
2
  export { RootMonorepo, Strategy, findMonorepoRoot, findMonorepoRootSync } from './monorepo.js';
3
3
  export { findPackageRoot, findPackageRootSync } from './package.js';
4
- export { E as EnsurePackagesOptions, F as FindPackageJsonCache, d as NormalizedPackageJson, N as NormalizedReadResult, P as PackageJson, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-z2Cyn4CW.js';
4
+ export { E as EnsurePackagesOptions, F as FindPackageJsonCache, d as NormalizedPackageJson, N as NormalizedReadResult, P as PackageJson, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-DvaC9k-3.js';
5
5
  export { PackageManager, PackageManagerResult, findLockFile, findLockFileSync, findPackageManager, findPackageManagerSync, generateMissingPackagesInstallMessage, getPackageManagerVersion, identifyInitiatingPackageManager } from './package-manager.js';
6
6
  import '@visulima/fs';
7
7
  import '@antfu/install-pkg';
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { default as PackageNotFoundError } from './packem_shared/PackageNotFoundError-BQIw1KE1.mjs';
1
+ export { default as PackageNotFoundError } from './packem_shared/PackageNotFoundError-Ck8Sk4z9.mjs';
2
2
  export { findMonorepoRoot, findMonorepoRootSync } from './monorepo.mjs';
3
3
  export { findPackageRoot, findPackageRootSync } from './package.mjs';
4
4
  export { ensurePackages, findPackageJson, findPackageJsonSync, getPackageJsonProperty, hasPackageJsonAnyDependency, hasPackageJsonProperty, parsePackageJson, writePackageJson, writePackageJsonSync } from './package-json.mjs';
package/dist/monorepo.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
- import { findUp, readJson, findUpSync, readJsonSync } from '@visulima/fs';
2
+ import { findUpSync, readJsonSync, findUp, readJson } from '@visulima/fs';
3
3
  import { NotFoundError } from '@visulima/fs/error';
4
4
  import { dirname, join } from '@visulima/path';
5
- import { findPackageManager, findPackageManagerSync } from './package-manager.mjs';
5
+ import { findPackageManagerSync, findPackageManager } from './package-manager.mjs';
6
6
 
7
7
  var __defProp = Object.defineProperty;
8
8
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -161,7 +161,7 @@ function assertNotStringIndex(object, key) {
161
161
  __name$1(assertNotStringIndex, "assertNotStringIndex");
162
162
  function getProperty(object, path, value) {
163
163
  if (!isObject(object) || typeof path !== "string") {
164
- return value === undefined ? object : value;
164
+ return value === void 0 ? object : value;
165
165
  }
166
166
  const pathArray = getPathSegments(path);
167
167
  if (pathArray.length === 0) {
@@ -170,18 +170,18 @@ function getProperty(object, path, value) {
170
170
  for (let index = 0; index < pathArray.length; index++) {
171
171
  const key = pathArray[index];
172
172
  if (isStringIndex(object, key)) {
173
- object = index === pathArray.length - 1 ? undefined : null;
173
+ object = index === pathArray.length - 1 ? void 0 : null;
174
174
  } else {
175
175
  object = object[key];
176
176
  }
177
- if (object === undefined || object === null) {
177
+ if (object === void 0 || object === null) {
178
178
  if (index !== pathArray.length - 1) {
179
179
  return value;
180
180
  }
181
181
  break;
182
182
  }
183
183
  }
184
- return object === undefined ? value : object;
184
+ return object === void 0 ? value : object;
185
185
  }
186
186
  __name$1(getProperty, "getProperty");
187
187
  function setProperty(object, path, value) {
@@ -284,7 +284,7 @@ function deepKeys(object) {
284
284
  }
285
285
  __name$1(deepKeys, "deepKeys");
286
286
 
287
- const isNode = typeof process.stdout < "u" && !process.versions?.deno && !globalThis.window;
287
+ const isNode = typeof process.stdout < "u" && !process.versions.deno && !globalThis.window;
288
288
 
289
289
  var __defProp = Object.defineProperty;
290
290
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -432,9 +432,9 @@ const ensurePackages = /* @__PURE__ */ __name(async (packageJson, packages, inst
432
432
  if (typeof config.confirm?.message === "function") {
433
433
  config.confirm.message = config.confirm.message(nonExistingPackages);
434
434
  }
435
- if (config.confirm?.message === undefined) {
435
+ if (config.confirm?.message === void 0) {
436
436
  const message = `${nonExistingPackages.length === 1 ? "Package is" : "Packages are"} required for this config: ${nonExistingPackages.join(", ")}. Do you want to install them?`;
437
- if (config.confirm === undefined) {
437
+ if (config.confirm === void 0) {
438
438
  config.confirm = {
439
439
  message
440
440
  };
@@ -448,7 +448,7 @@ const ensurePackages = /* @__PURE__ */ __name(async (packageJson, packages, inst
448
448
  }
449
449
  await installPkg.installPackage(nonExistingPackages, {
450
450
  ...config.installPackage,
451
- cwd: config.cwd ? utils.toPath(config.cwd) : undefined,
451
+ cwd: config.cwd ? utils.toPath(config.cwd) : void 0,
452
452
  dev: installKey === "devDependencies"
453
453
  });
454
454
  }, "ensurePackages");
@@ -1,4 +1,4 @@
1
1
  import '@visulima/fs';
2
- export { F as FindPackageJsonCache, N as NormalizedReadResult, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-z2Cyn4CW.cjs';
2
+ export { F as FindPackageJsonCache, N as NormalizedReadResult, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-DvaC9k-3.cjs';
3
3
  import '@antfu/install-pkg';
4
4
  import 'normalize-package-data';
@@ -1,4 +1,4 @@
1
1
  import '@visulima/fs';
2
- export { F as FindPackageJsonCache, N as NormalizedReadResult, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-z2Cyn4CW.mjs';
2
+ export { F as FindPackageJsonCache, N as NormalizedReadResult, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-DvaC9k-3.mjs';
3
3
  import '@antfu/install-pkg';
4
4
  import 'normalize-package-data';
@@ -1,4 +1,4 @@
1
1
  import '@visulima/fs';
2
- export { F as FindPackageJsonCache, N as NormalizedReadResult, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-z2Cyn4CW.js';
2
+ export { F as FindPackageJsonCache, N as NormalizedReadResult, e as ensurePackages, f as findPackageJson, a as findPackageJsonSync, g as getPackageJsonProperty, h as hasPackageJsonAnyDependency, b as hasPackageJsonProperty, p as parsePackageJson, w as writePackageJson, c as writePackageJsonSync } from './packem_shared/package-json-DvaC9k-3.js';
3
3
  import '@antfu/install-pkg';
4
4
  import 'normalize-package-data';
@@ -152,7 +152,7 @@ function assertNotStringIndex(object, key) {
152
152
  __name$1(assertNotStringIndex, "assertNotStringIndex");
153
153
  function getProperty(object, path, value) {
154
154
  if (!isObject(object) || typeof path !== "string") {
155
- return value === undefined ? object : value;
155
+ return value === void 0 ? object : value;
156
156
  }
157
157
  const pathArray = getPathSegments(path);
158
158
  if (pathArray.length === 0) {
@@ -161,18 +161,18 @@ function getProperty(object, path, value) {
161
161
  for (let index = 0; index < pathArray.length; index++) {
162
162
  const key = pathArray[index];
163
163
  if (isStringIndex(object, key)) {
164
- object = index === pathArray.length - 1 ? undefined : null;
164
+ object = index === pathArray.length - 1 ? void 0 : null;
165
165
  } else {
166
166
  object = object[key];
167
167
  }
168
- if (object === undefined || object === null) {
168
+ if (object === void 0 || object === null) {
169
169
  if (index !== pathArray.length - 1) {
170
170
  return value;
171
171
  }
172
172
  break;
173
173
  }
174
174
  }
175
- return object === undefined ? value : object;
175
+ return object === void 0 ? value : object;
176
176
  }
177
177
  __name$1(getProperty, "getProperty");
178
178
  function setProperty(object, path, value) {
@@ -275,7 +275,7 @@ function deepKeys(object) {
275
275
  }
276
276
  __name$1(deepKeys, "deepKeys");
277
277
 
278
- const isNode = typeof process.stdout < "u" && !process.versions?.deno && !globalThis.window;
278
+ const isNode = typeof process.stdout < "u" && !process.versions.deno && !globalThis.window;
279
279
 
280
280
  var __defProp = Object.defineProperty;
281
281
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -423,9 +423,9 @@ const ensurePackages = /* @__PURE__ */ __name(async (packageJson, packages, inst
423
423
  if (typeof config.confirm?.message === "function") {
424
424
  config.confirm.message = config.confirm.message(nonExistingPackages);
425
425
  }
426
- if (config.confirm?.message === undefined) {
426
+ if (config.confirm?.message === void 0) {
427
427
  const message = `${nonExistingPackages.length === 1 ? "Package is" : "Packages are"} required for this config: ${nonExistingPackages.join(", ")}. Do you want to install them?`;
428
- if (config.confirm === undefined) {
428
+ if (config.confirm === void 0) {
429
429
  config.confirm = {
430
430
  message
431
431
  };
@@ -439,7 +439,7 @@ const ensurePackages = /* @__PURE__ */ __name(async (packageJson, packages, inst
439
439
  }
440
440
  await installPackage(nonExistingPackages, {
441
441
  ...config.installPackage,
442
- cwd: config.cwd ? toPath(config.cwd) : undefined,
442
+ cwd: config.cwd ? toPath(config.cwd) : void 0,
443
443
  dev: installKey === "devDependencies"
444
444
  });
445
445
  }, "ensurePackages");
@@ -25,11 +25,11 @@ const packageMangerFindUpMatcher = /* @__PURE__ */ __name((directory) => {
25
25
  const packageJsonFilePath = path.join(directory, "package.json");
26
26
  if (node_fs.existsSync(packageJsonFilePath)) {
27
27
  const packageJson$1 = packageJson.parsePackageJson(node_fs.readFileSync(packageJsonFilePath, "utf8"));
28
- if (packageJson$1.packageManager !== undefined) {
28
+ if (packageJson$1.packageManager !== void 0) {
29
29
  return packageJsonFilePath;
30
30
  }
31
31
  }
32
- return undefined;
32
+ return void 0;
33
33
  }, "packageMangerFindUpMatcher");
34
34
  const findPackageManagerOnFile = /* @__PURE__ */ __name((foundFile) => {
35
35
  if (!foundFile) {
@@ -109,7 +109,7 @@ const findPackageManagerSync = /* @__PURE__ */ __name((cwd) => {
109
109
  const getPackageManagerVersion = /* @__PURE__ */ __name((name) => node_child_process.execSync(`${name} --version`).toString("utf8").trim(), "getPackageManagerVersion");
110
110
  const identifyInitiatingPackageManager = /* @__PURE__ */ __name(async () => {
111
111
  if (!process.env.npm_config_user_agent) {
112
- return undefined;
112
+ return void 0;
113
113
  }
114
114
  const pmSpec = process.env.npm_config_user_agent.split(" ")[0];
115
115
  const separatorPos = pmSpec.lastIndexOf("/");
@@ -121,7 +121,7 @@ const identifyInitiatingPackageManager = /* @__PURE__ */ __name(async () => {
121
121
  }, "identifyInitiatingPackageManager");
122
122
  const generateMissingPackagesInstallMessage = /* @__PURE__ */ __name((packageName, missingPackages, options) => {
123
123
  const s = missingPackages.length === 1 ? "" : "s";
124
- if (options.packageManagers === undefined) {
124
+ if (options.packageManagers === void 0) {
125
125
  options.packageManagers = ["npm", "pnpm", "yarn"];
126
126
  }
127
127
  if (options.packageManagers.length === 0) {
@@ -21,11 +21,11 @@ const packageMangerFindUpMatcher = /* @__PURE__ */ __name((directory) => {
21
21
  const packageJsonFilePath = join(directory, "package.json");
22
22
  if (existsSync(packageJsonFilePath)) {
23
23
  const packageJson = parsePackageJson(readFileSync(packageJsonFilePath, "utf8"));
24
- if (packageJson.packageManager !== undefined) {
24
+ if (packageJson.packageManager !== void 0) {
25
25
  return packageJsonFilePath;
26
26
  }
27
27
  }
28
- return undefined;
28
+ return void 0;
29
29
  }, "packageMangerFindUpMatcher");
30
30
  const findPackageManagerOnFile = /* @__PURE__ */ __name((foundFile) => {
31
31
  if (!foundFile) {
@@ -105,7 +105,7 @@ const findPackageManagerSync = /* @__PURE__ */ __name((cwd) => {
105
105
  const getPackageManagerVersion = /* @__PURE__ */ __name((name) => execSync(`${name} --version`).toString("utf8").trim(), "getPackageManagerVersion");
106
106
  const identifyInitiatingPackageManager = /* @__PURE__ */ __name(async () => {
107
107
  if (!process.env.npm_config_user_agent) {
108
- return undefined;
108
+ return void 0;
109
109
  }
110
110
  const pmSpec = process.env.npm_config_user_agent.split(" ")[0];
111
111
  const separatorPos = pmSpec.lastIndexOf("/");
@@ -117,7 +117,7 @@ const identifyInitiatingPackageManager = /* @__PURE__ */ __name(async () => {
117
117
  }, "identifyInitiatingPackageManager");
118
118
  const generateMissingPackagesInstallMessage = /* @__PURE__ */ __name((packageName, missingPackages, options) => {
119
119
  const s = missingPackages.length === 1 ? "" : "s";
120
- if (options.packageManagers === undefined) {
120
+ if (options.packageManagers === void 0) {
121
121
  options.packageManagers = ["npm", "pnpm", "yarn"];
122
122
  }
123
123
  if (options.packageManagers.length === 0) {
package/dist/package.cjs CHANGED
@@ -16,7 +16,7 @@ const packageJsonMatcher = /* @__PURE__ */ __name((directory) => {
16
16
  return "package.json";
17
17
  }
18
18
  }
19
- return undefined;
19
+ return void 0;
20
20
  }, "packageJsonMatcher");
21
21
  const findPackageRoot = /* @__PURE__ */ __name(async (cwd) => {
22
22
  try {
package/dist/package.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { findUp, findUpSync, readJsonSync } from '@visulima/fs';
2
+ import { findUpSync, readJsonSync, findUp } from '@visulima/fs';
3
3
  import { dirname, join } from '@visulima/path';
4
- import { findLockFile, findLockFileSync } from './package-manager.mjs';
4
+ import { findLockFileSync, findLockFile } from './package-manager.mjs';
5
5
 
6
6
  var __defProp = Object.defineProperty;
7
7
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -12,7 +12,7 @@ const packageJsonMatcher = /* @__PURE__ */ __name((directory) => {
12
12
  return "package.json";
13
13
  }
14
14
  }
15
- return undefined;
15
+ return void 0;
16
16
  }, "packageJsonMatcher");
17
17
  const findPackageRoot = /* @__PURE__ */ __name(async (cwd) => {
18
18
  try {
@@ -18,14 +18,14 @@ class PackageNotFoundError extends Error {
18
18
  super("Package was not found.");
19
19
  return;
20
20
  }
21
- if (packageManager === undefined) {
21
+ if (packageManager === void 0) {
22
22
  try {
23
23
  const foundManager = findPackageManagerSync();
24
24
  packageManager = foundManager.packageManager;
25
25
  } catch {
26
26
  }
27
27
  }
28
- if (packageManager === undefined) {
28
+ if (packageManager === void 0) {
29
29
  packageManager = "npm";
30
30
  }
31
31
  super(`Package '${packageName.join(" ")}' was not found. Please install it using '${packageManager} install ${packageName.join(" ")}'`);
@@ -20,14 +20,14 @@ class PackageNotFoundError extends Error {
20
20
  super("Package was not found.");
21
21
  return;
22
22
  }
23
- if (packageManager$1 === undefined) {
23
+ if (packageManager$1 === void 0) {
24
24
  try {
25
25
  const foundManager = packageManager.findPackageManagerSync();
26
26
  packageManager$1 = foundManager.packageManager;
27
27
  } catch {
28
28
  }
29
29
  }
30
- if (packageManager$1 === undefined) {
30
+ if (packageManager$1 === void 0) {
31
31
  packageManager$1 = "npm";
32
32
  }
33
33
  super(`Package '${packageName.join(" ")}' was not found. Please install it using '${packageManager$1} install ${packageName.join(" ")}'`);
@@ -423,52 +423,6 @@ type BuildTuple<L extends number, Fill = unknown, T extends readonly unknown[] =
423
423
  ? T
424
424
  : BuildTuple<L, Fill, [...T, Fill]>;
425
425
 
426
- /**
427
- Returns the maximum value from a tuple of integers.
428
-
429
- Note:
430
- - Float numbers are not supported.
431
-
432
- @example
433
- ```
434
- ArrayMax<[1, 2, 5, 3]>;
435
- //=> 5
436
-
437
- ArrayMax<[1, 2, 5, 3, 99, -1]>;
438
- //=> 99
439
- ```
440
- */
441
- type TupleMax<A extends number[], Result extends number = NegativeInfinity> = number extends A[number]
442
- ? never :
443
- A extends [infer F extends number, ...infer R extends number[]]
444
- ? GreaterThan<F, Result> extends true
445
- ? TupleMax<R, F>
446
- : TupleMax<R, Result>
447
- : Result;
448
-
449
- /**
450
- Returns the minimum value from a tuple of integers.
451
-
452
- Note:
453
- - Float numbers are not supported.
454
-
455
- @example
456
- ```
457
- ArrayMin<[1, 2, 5, 3]>;
458
- //=> 1
459
-
460
- ArrayMin<[1, 2, 5, 3, -5]>;
461
- //=> -5
462
- ```
463
- */
464
- type TupleMin<A extends number[], Result extends number = PositiveInfinity> = number extends A[number]
465
- ? never
466
- : A extends [infer F extends number, ...infer R extends number[]]
467
- ? LessThan<F, Result> extends true
468
- ? TupleMin<R, F>
469
- : TupleMin<R, Result>
470
- : Result;
471
-
472
426
  /**
473
427
  Return a string representation of the given string or number.
474
428
 
@@ -663,85 +617,46 @@ type IsNumberLike<N> =
663
617
  : false;
664
618
 
665
619
  /**
666
- Matches any primitive, `void`, `Date`, or `RegExp` value.
667
- */
668
- type BuiltIns = Primitive | void | Date | RegExp;
669
-
670
- /**
671
- Matches non-recursive types.
672
- */
673
- type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown);
674
-
675
- /**
676
- Returns the sum of two numbers.
677
-
678
- Note:
679
- - A or B can only support `-999` ~ `999`.
680
- - A and B can only be small integers, less than 1000.
681
- - If the result is negative, you can only get `number`.
620
+ Returns the number with reversed sign.
682
621
 
683
622
  @example
684
623
  ```
685
- import type {Sum} from 'type-fest';
686
-
687
- Sum<111, 222>;
688
- //=> 333
689
-
690
- Sum<-111, 222>;
691
- //=> 111
624
+ ReverseSign<-1>;
625
+ //=> 1
692
626
 
693
- Sum<111, -222>;
694
- //=> number
627
+ ReverseSign<1>;
628
+ //=> -1
695
629
 
696
- Sum<PositiveInfinity, -9999>;
630
+ ReverseSign<NegativeInfinity>
697
631
  //=> PositiveInfinity
698
632
 
699
- Sum<PositiveInfinity, NegativeInfinity>;
700
- //=> number
633
+ ReverseSign<PositiveInfinity>
634
+ //=> NegativeInfinity
701
635
  ```
636
+ */
637
+ type ReverseSign<N extends number> =
638
+ // Handle edge cases
639
+ N extends 0 ? 0 : N extends PositiveInfinity ? NegativeInfinity : N extends NegativeInfinity ? PositiveInfinity :
640
+ // Handle negative numbers
641
+ `${N}` extends `-${infer P extends number}` ? P
642
+ // Handle positive numbers
643
+ : `-${N}` extends `${infer R extends number}` ? R : never;
702
644
 
703
- @category Numeric
645
+ /**
646
+ Matches any primitive, `void`, `Date`, or `RegExp` value.
704
647
  */
705
- // TODO: Support big integer and negative number.
706
- type Sum<A extends number, B extends number> = number extends A | B
707
- ? number
708
- : [
709
- IsEqual<A, PositiveInfinity>, IsEqual<A, NegativeInfinity>,
710
- IsEqual<B, PositiveInfinity>, IsEqual<B, NegativeInfinity>,
711
- ] extends infer R extends [boolean, boolean, boolean, boolean]
712
- ? Or<
713
- And<IsEqual<R[0], true>, IsEqual<R[3], false>>,
714
- And<IsEqual<R[2], true>, IsEqual<R[1], false>>
715
- > extends true
716
- ? PositiveInfinity
717
- : Or<
718
- And<IsEqual<R[1], true>, IsEqual<R[2], false>>,
719
- And<IsEqual<R[3], true>, IsEqual<R[0], false>>
720
- > extends true
721
- ? NegativeInfinity
722
- : true extends R[number]
723
- ? number
724
- : ([IsNegative<A>, IsNegative<B>] extends infer R
725
- ? [false, false] extends R
726
- ? [...BuildTuple<A>, ...BuildTuple<B>]['length']
727
- : [true, true] extends R
728
- ? number
729
- : TupleMax<[NumberAbsolute<A>, NumberAbsolute<B>]> extends infer Max_
730
- ? TupleMin<[NumberAbsolute<A>, NumberAbsolute<B>]> extends infer Min_ extends number
731
- ? Max_ extends A | B
732
- ? Subtract<Max_, Min_>
733
- : number
734
- : never
735
- : never
736
- : never) & number
737
- : never;
648
+ type BuiltIns = Primitive | void | Date | RegExp;
649
+
650
+ /**
651
+ Matches non-recursive types.
652
+ */
653
+ type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown);
738
654
 
739
655
  /**
740
656
  Returns the difference between two numbers.
741
657
 
742
658
  Note:
743
659
  - A or B can only support `-999` ~ `999`.
744
- - If the result is negative, you can only get `number`.
745
660
 
746
661
  @example
747
662
  ```
@@ -754,7 +669,10 @@ Subtract<111, -222>;
754
669
  //=> 333
755
670
 
756
671
  Subtract<-111, 222>;
757
- //=> number
672
+ //=> -333
673
+
674
+ Subtract<18, 96>;
675
+ //=> -78
758
676
 
759
677
  Subtract<PositiveInfinity, 9999>;
760
678
  //=> PositiveInfinity
@@ -765,38 +683,53 @@ Subtract<PositiveInfinity, PositiveInfinity>;
765
683
 
766
684
  @category Numeric
767
685
  */
768
- // TODO: Support big integer and negative number.
769
- type Subtract<A extends number, B extends number> = number extends A | B
770
- ? number
771
- : [
772
- IsEqual<A, PositiveInfinity>, IsEqual<A, NegativeInfinity>,
773
- IsEqual<B, PositiveInfinity>, IsEqual<B, NegativeInfinity>,
774
- ] extends infer R extends [boolean, boolean, boolean, boolean]
775
- ? Or<
776
- And<IsEqual<R[0], true>, IsEqual<R[2], false>>,
777
- And<IsEqual<R[3], true>, IsEqual<R[1], false>>
778
- > extends true
779
- ? PositiveInfinity
780
- : Or<
781
- And<IsEqual<R[1], true>, IsEqual<R[3], false>>,
782
- And<IsEqual<R[2], true>, IsEqual<R[0], false>>
783
- > extends true
784
- ? NegativeInfinity
785
- : true extends R[number]
786
- ? number
787
- : [IsNegative<A>, IsNegative<B>] extends infer R
788
- ? [false, false] extends R
789
- ? BuildTuple<A> extends infer R
790
- ? R extends [...BuildTuple<B>, ...infer R]
791
- ? R['length']
792
- : number
793
- : never
794
- : LessThan<A, B> extends true
795
- ? number
796
- : [false, true] extends R
797
- ? Sum<A, NumberAbsolute<B>>
798
- : Subtract<NumberAbsolute<B>, NumberAbsolute<A>>
799
- : never
686
+ // TODO: Support big integer.
687
+ type Subtract<A extends number, B extends number> =
688
+ // Handle cases when A or B is the actual "number" type
689
+ number extends A | B ? number
690
+ // Handle cases when A and B are both +/- infinity
691
+ : A extends B & (PositiveInfinity | NegativeInfinity) ? number
692
+ // Handle cases when A is - infinity or B is + infinity
693
+ : A extends NegativeInfinity ? NegativeInfinity : B extends PositiveInfinity ? NegativeInfinity
694
+ // Handle cases when A is + infinity or B is - infinity
695
+ : A extends PositiveInfinity ? PositiveInfinity : B extends NegativeInfinity ? PositiveInfinity
696
+ // Handle case when numbers are equal to each other
697
+ : A extends B ? 0
698
+ // Handle cases when A or B is 0
699
+ : A extends 0 ? ReverseSign<B> : B extends 0 ? A
700
+ // Handle remaining regular cases
701
+ : SubtractPostChecks<A, B>;
702
+
703
+ /**
704
+ Subtracts two numbers A and B, such that they are not equal and neither of them are 0, +/- infinity or the `number` type
705
+ */
706
+ type SubtractPostChecks<A extends number, B extends number, AreNegative = [IsNegative<A>, IsNegative<B>]> =
707
+ AreNegative extends [false, false]
708
+ ? SubtractPositives<A, B>
709
+ : AreNegative extends [true, true]
710
+ // When both numbers are negative we subtract the absolute values and then reverse the sign
711
+ ? ReverseSign<SubtractPositives<NumberAbsolute<A>, NumberAbsolute<B>>>
712
+ // When the signs are different we can add the absolute values and then reverse the sign if A < B
713
+ : [...BuildTuple<NumberAbsolute<A>>, ...BuildTuple<NumberAbsolute<B>>] extends infer R extends unknown[]
714
+ ? LessThan<A, B> extends true ? ReverseSign<R['length']> : R['length']
715
+ : never;
716
+
717
+ /**
718
+ Subtracts two positive numbers.
719
+ */
720
+ type SubtractPositives<A extends number, B extends number> =
721
+ LessThan<A, B> extends true
722
+ // When A < B we can reverse the result of B - A
723
+ ? ReverseSign<SubtractIfAGreaterThanB<B, A>>
724
+ : SubtractIfAGreaterThanB<A, B>;
725
+
726
+ /**
727
+ Subtracts two positive numbers A and B such that A > B.
728
+ */
729
+ type SubtractIfAGreaterThanB<A extends number, B extends number> =
730
+ // This is where we always want to end up and do the actual subtraction
731
+ BuildTuple<A> extends [...BuildTuple<B>, ...infer R]
732
+ ? R['length']
800
733
  : never;
801
734
 
802
735
  /**
@@ -1040,13 +973,7 @@ type InternalPaths<T, Options extends Required<PathsOptions>> =
1040
973
  bracketNotation: Options['bracketNotation'];
1041
974
  maxRecursionDepth: Subtract<MaxDepth, 1>;
1042
975
  leavesOnly: Options['leavesOnly'];
1043
- depth: Options['depth'] extends infer Depth extends number // For distributing `Options['depth']`
1044
- ? Depth extends 0 // Don't subtract further if `Depth` has reached `0`
1045
- ? never
1046
- : ToString<Depth> extends `-${number}` // Don't subtract if `Depth` is -ve
1047
- ? never
1048
- : Subtract<Options['depth'], 1> // If `Subtract` supported -ve numbers, then `depth` could have simply been `Subtract<Options['depth'], 1>`
1049
- : never; // Should never happen
976
+ depth: Subtract<Options['depth'], 1>;
1050
977
  }> extends infer SubPath
1051
978
  ? SubPath extends string | number
1052
979
  ? (
@@ -423,52 +423,6 @@ type BuildTuple<L extends number, Fill = unknown, T extends readonly unknown[] =
423
423
  ? T
424
424
  : BuildTuple<L, Fill, [...T, Fill]>;
425
425
 
426
- /**
427
- Returns the maximum value from a tuple of integers.
428
-
429
- Note:
430
- - Float numbers are not supported.
431
-
432
- @example
433
- ```
434
- ArrayMax<[1, 2, 5, 3]>;
435
- //=> 5
436
-
437
- ArrayMax<[1, 2, 5, 3, 99, -1]>;
438
- //=> 99
439
- ```
440
- */
441
- type TupleMax<A extends number[], Result extends number = NegativeInfinity> = number extends A[number]
442
- ? never :
443
- A extends [infer F extends number, ...infer R extends number[]]
444
- ? GreaterThan<F, Result> extends true
445
- ? TupleMax<R, F>
446
- : TupleMax<R, Result>
447
- : Result;
448
-
449
- /**
450
- Returns the minimum value from a tuple of integers.
451
-
452
- Note:
453
- - Float numbers are not supported.
454
-
455
- @example
456
- ```
457
- ArrayMin<[1, 2, 5, 3]>;
458
- //=> 1
459
-
460
- ArrayMin<[1, 2, 5, 3, -5]>;
461
- //=> -5
462
- ```
463
- */
464
- type TupleMin<A extends number[], Result extends number = PositiveInfinity> = number extends A[number]
465
- ? never
466
- : A extends [infer F extends number, ...infer R extends number[]]
467
- ? LessThan<F, Result> extends true
468
- ? TupleMin<R, F>
469
- : TupleMin<R, Result>
470
- : Result;
471
-
472
426
  /**
473
427
  Return a string representation of the given string or number.
474
428
 
@@ -663,85 +617,46 @@ type IsNumberLike<N> =
663
617
  : false;
664
618
 
665
619
  /**
666
- Matches any primitive, `void`, `Date`, or `RegExp` value.
667
- */
668
- type BuiltIns = Primitive | void | Date | RegExp;
669
-
670
- /**
671
- Matches non-recursive types.
672
- */
673
- type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown);
674
-
675
- /**
676
- Returns the sum of two numbers.
677
-
678
- Note:
679
- - A or B can only support `-999` ~ `999`.
680
- - A and B can only be small integers, less than 1000.
681
- - If the result is negative, you can only get `number`.
620
+ Returns the number with reversed sign.
682
621
 
683
622
  @example
684
623
  ```
685
- import type {Sum} from 'type-fest';
686
-
687
- Sum<111, 222>;
688
- //=> 333
689
-
690
- Sum<-111, 222>;
691
- //=> 111
624
+ ReverseSign<-1>;
625
+ //=> 1
692
626
 
693
- Sum<111, -222>;
694
- //=> number
627
+ ReverseSign<1>;
628
+ //=> -1
695
629
 
696
- Sum<PositiveInfinity, -9999>;
630
+ ReverseSign<NegativeInfinity>
697
631
  //=> PositiveInfinity
698
632
 
699
- Sum<PositiveInfinity, NegativeInfinity>;
700
- //=> number
633
+ ReverseSign<PositiveInfinity>
634
+ //=> NegativeInfinity
701
635
  ```
636
+ */
637
+ type ReverseSign<N extends number> =
638
+ // Handle edge cases
639
+ N extends 0 ? 0 : N extends PositiveInfinity ? NegativeInfinity : N extends NegativeInfinity ? PositiveInfinity :
640
+ // Handle negative numbers
641
+ `${N}` extends `-${infer P extends number}` ? P
642
+ // Handle positive numbers
643
+ : `-${N}` extends `${infer R extends number}` ? R : never;
702
644
 
703
- @category Numeric
645
+ /**
646
+ Matches any primitive, `void`, `Date`, or `RegExp` value.
704
647
  */
705
- // TODO: Support big integer and negative number.
706
- type Sum<A extends number, B extends number> = number extends A | B
707
- ? number
708
- : [
709
- IsEqual<A, PositiveInfinity>, IsEqual<A, NegativeInfinity>,
710
- IsEqual<B, PositiveInfinity>, IsEqual<B, NegativeInfinity>,
711
- ] extends infer R extends [boolean, boolean, boolean, boolean]
712
- ? Or<
713
- And<IsEqual<R[0], true>, IsEqual<R[3], false>>,
714
- And<IsEqual<R[2], true>, IsEqual<R[1], false>>
715
- > extends true
716
- ? PositiveInfinity
717
- : Or<
718
- And<IsEqual<R[1], true>, IsEqual<R[2], false>>,
719
- And<IsEqual<R[3], true>, IsEqual<R[0], false>>
720
- > extends true
721
- ? NegativeInfinity
722
- : true extends R[number]
723
- ? number
724
- : ([IsNegative<A>, IsNegative<B>] extends infer R
725
- ? [false, false] extends R
726
- ? [...BuildTuple<A>, ...BuildTuple<B>]['length']
727
- : [true, true] extends R
728
- ? number
729
- : TupleMax<[NumberAbsolute<A>, NumberAbsolute<B>]> extends infer Max_
730
- ? TupleMin<[NumberAbsolute<A>, NumberAbsolute<B>]> extends infer Min_ extends number
731
- ? Max_ extends A | B
732
- ? Subtract<Max_, Min_>
733
- : number
734
- : never
735
- : never
736
- : never) & number
737
- : never;
648
+ type BuiltIns = Primitive | void | Date | RegExp;
649
+
650
+ /**
651
+ Matches non-recursive types.
652
+ */
653
+ type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown);
738
654
 
739
655
  /**
740
656
  Returns the difference between two numbers.
741
657
 
742
658
  Note:
743
659
  - A or B can only support `-999` ~ `999`.
744
- - If the result is negative, you can only get `number`.
745
660
 
746
661
  @example
747
662
  ```
@@ -754,7 +669,10 @@ Subtract<111, -222>;
754
669
  //=> 333
755
670
 
756
671
  Subtract<-111, 222>;
757
- //=> number
672
+ //=> -333
673
+
674
+ Subtract<18, 96>;
675
+ //=> -78
758
676
 
759
677
  Subtract<PositiveInfinity, 9999>;
760
678
  //=> PositiveInfinity
@@ -765,38 +683,53 @@ Subtract<PositiveInfinity, PositiveInfinity>;
765
683
 
766
684
  @category Numeric
767
685
  */
768
- // TODO: Support big integer and negative number.
769
- type Subtract<A extends number, B extends number> = number extends A | B
770
- ? number
771
- : [
772
- IsEqual<A, PositiveInfinity>, IsEqual<A, NegativeInfinity>,
773
- IsEqual<B, PositiveInfinity>, IsEqual<B, NegativeInfinity>,
774
- ] extends infer R extends [boolean, boolean, boolean, boolean]
775
- ? Or<
776
- And<IsEqual<R[0], true>, IsEqual<R[2], false>>,
777
- And<IsEqual<R[3], true>, IsEqual<R[1], false>>
778
- > extends true
779
- ? PositiveInfinity
780
- : Or<
781
- And<IsEqual<R[1], true>, IsEqual<R[3], false>>,
782
- And<IsEqual<R[2], true>, IsEqual<R[0], false>>
783
- > extends true
784
- ? NegativeInfinity
785
- : true extends R[number]
786
- ? number
787
- : [IsNegative<A>, IsNegative<B>] extends infer R
788
- ? [false, false] extends R
789
- ? BuildTuple<A> extends infer R
790
- ? R extends [...BuildTuple<B>, ...infer R]
791
- ? R['length']
792
- : number
793
- : never
794
- : LessThan<A, B> extends true
795
- ? number
796
- : [false, true] extends R
797
- ? Sum<A, NumberAbsolute<B>>
798
- : Subtract<NumberAbsolute<B>, NumberAbsolute<A>>
799
- : never
686
+ // TODO: Support big integer.
687
+ type Subtract<A extends number, B extends number> =
688
+ // Handle cases when A or B is the actual "number" type
689
+ number extends A | B ? number
690
+ // Handle cases when A and B are both +/- infinity
691
+ : A extends B & (PositiveInfinity | NegativeInfinity) ? number
692
+ // Handle cases when A is - infinity or B is + infinity
693
+ : A extends NegativeInfinity ? NegativeInfinity : B extends PositiveInfinity ? NegativeInfinity
694
+ // Handle cases when A is + infinity or B is - infinity
695
+ : A extends PositiveInfinity ? PositiveInfinity : B extends NegativeInfinity ? PositiveInfinity
696
+ // Handle case when numbers are equal to each other
697
+ : A extends B ? 0
698
+ // Handle cases when A or B is 0
699
+ : A extends 0 ? ReverseSign<B> : B extends 0 ? A
700
+ // Handle remaining regular cases
701
+ : SubtractPostChecks<A, B>;
702
+
703
+ /**
704
+ Subtracts two numbers A and B, such that they are not equal and neither of them are 0, +/- infinity or the `number` type
705
+ */
706
+ type SubtractPostChecks<A extends number, B extends number, AreNegative = [IsNegative<A>, IsNegative<B>]> =
707
+ AreNegative extends [false, false]
708
+ ? SubtractPositives<A, B>
709
+ : AreNegative extends [true, true]
710
+ // When both numbers are negative we subtract the absolute values and then reverse the sign
711
+ ? ReverseSign<SubtractPositives<NumberAbsolute<A>, NumberAbsolute<B>>>
712
+ // When the signs are different we can add the absolute values and then reverse the sign if A < B
713
+ : [...BuildTuple<NumberAbsolute<A>>, ...BuildTuple<NumberAbsolute<B>>] extends infer R extends unknown[]
714
+ ? LessThan<A, B> extends true ? ReverseSign<R['length']> : R['length']
715
+ : never;
716
+
717
+ /**
718
+ Subtracts two positive numbers.
719
+ */
720
+ type SubtractPositives<A extends number, B extends number> =
721
+ LessThan<A, B> extends true
722
+ // When A < B we can reverse the result of B - A
723
+ ? ReverseSign<SubtractIfAGreaterThanB<B, A>>
724
+ : SubtractIfAGreaterThanB<A, B>;
725
+
726
+ /**
727
+ Subtracts two positive numbers A and B such that A > B.
728
+ */
729
+ type SubtractIfAGreaterThanB<A extends number, B extends number> =
730
+ // This is where we always want to end up and do the actual subtraction
731
+ BuildTuple<A> extends [...BuildTuple<B>, ...infer R]
732
+ ? R['length']
800
733
  : never;
801
734
 
802
735
  /**
@@ -1040,13 +973,7 @@ type InternalPaths<T, Options extends Required<PathsOptions>> =
1040
973
  bracketNotation: Options['bracketNotation'];
1041
974
  maxRecursionDepth: Subtract<MaxDepth, 1>;
1042
975
  leavesOnly: Options['leavesOnly'];
1043
- depth: Options['depth'] extends infer Depth extends number // For distributing `Options['depth']`
1044
- ? Depth extends 0 // Don't subtract further if `Depth` has reached `0`
1045
- ? never
1046
- : ToString<Depth> extends `-${number}` // Don't subtract if `Depth` is -ve
1047
- ? never
1048
- : Subtract<Options['depth'], 1> // If `Subtract` supported -ve numbers, then `depth` could have simply been `Subtract<Options['depth'], 1>`
1049
- : never; // Should never happen
976
+ depth: Subtract<Options['depth'], 1>;
1050
977
  }> extends infer SubPath
1051
978
  ? SubPath extends string | number
1052
979
  ? (
@@ -423,52 +423,6 @@ type BuildTuple<L extends number, Fill = unknown, T extends readonly unknown[] =
423
423
  ? T
424
424
  : BuildTuple<L, Fill, [...T, Fill]>;
425
425
 
426
- /**
427
- Returns the maximum value from a tuple of integers.
428
-
429
- Note:
430
- - Float numbers are not supported.
431
-
432
- @example
433
- ```
434
- ArrayMax<[1, 2, 5, 3]>;
435
- //=> 5
436
-
437
- ArrayMax<[1, 2, 5, 3, 99, -1]>;
438
- //=> 99
439
- ```
440
- */
441
- type TupleMax<A extends number[], Result extends number = NegativeInfinity> = number extends A[number]
442
- ? never :
443
- A extends [infer F extends number, ...infer R extends number[]]
444
- ? GreaterThan<F, Result> extends true
445
- ? TupleMax<R, F>
446
- : TupleMax<R, Result>
447
- : Result;
448
-
449
- /**
450
- Returns the minimum value from a tuple of integers.
451
-
452
- Note:
453
- - Float numbers are not supported.
454
-
455
- @example
456
- ```
457
- ArrayMin<[1, 2, 5, 3]>;
458
- //=> 1
459
-
460
- ArrayMin<[1, 2, 5, 3, -5]>;
461
- //=> -5
462
- ```
463
- */
464
- type TupleMin<A extends number[], Result extends number = PositiveInfinity> = number extends A[number]
465
- ? never
466
- : A extends [infer F extends number, ...infer R extends number[]]
467
- ? LessThan<F, Result> extends true
468
- ? TupleMin<R, F>
469
- : TupleMin<R, Result>
470
- : Result;
471
-
472
426
  /**
473
427
  Return a string representation of the given string or number.
474
428
 
@@ -663,85 +617,46 @@ type IsNumberLike<N> =
663
617
  : false;
664
618
 
665
619
  /**
666
- Matches any primitive, `void`, `Date`, or `RegExp` value.
667
- */
668
- type BuiltIns = Primitive | void | Date | RegExp;
669
-
670
- /**
671
- Matches non-recursive types.
672
- */
673
- type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown);
674
-
675
- /**
676
- Returns the sum of two numbers.
677
-
678
- Note:
679
- - A or B can only support `-999` ~ `999`.
680
- - A and B can only be small integers, less than 1000.
681
- - If the result is negative, you can only get `number`.
620
+ Returns the number with reversed sign.
682
621
 
683
622
  @example
684
623
  ```
685
- import type {Sum} from 'type-fest';
686
-
687
- Sum<111, 222>;
688
- //=> 333
689
-
690
- Sum<-111, 222>;
691
- //=> 111
624
+ ReverseSign<-1>;
625
+ //=> 1
692
626
 
693
- Sum<111, -222>;
694
- //=> number
627
+ ReverseSign<1>;
628
+ //=> -1
695
629
 
696
- Sum<PositiveInfinity, -9999>;
630
+ ReverseSign<NegativeInfinity>
697
631
  //=> PositiveInfinity
698
632
 
699
- Sum<PositiveInfinity, NegativeInfinity>;
700
- //=> number
633
+ ReverseSign<PositiveInfinity>
634
+ //=> NegativeInfinity
701
635
  ```
636
+ */
637
+ type ReverseSign<N extends number> =
638
+ // Handle edge cases
639
+ N extends 0 ? 0 : N extends PositiveInfinity ? NegativeInfinity : N extends NegativeInfinity ? PositiveInfinity :
640
+ // Handle negative numbers
641
+ `${N}` extends `-${infer P extends number}` ? P
642
+ // Handle positive numbers
643
+ : `-${N}` extends `${infer R extends number}` ? R : never;
702
644
 
703
- @category Numeric
645
+ /**
646
+ Matches any primitive, `void`, `Date`, or `RegExp` value.
704
647
  */
705
- // TODO: Support big integer and negative number.
706
- type Sum<A extends number, B extends number> = number extends A | B
707
- ? number
708
- : [
709
- IsEqual<A, PositiveInfinity>, IsEqual<A, NegativeInfinity>,
710
- IsEqual<B, PositiveInfinity>, IsEqual<B, NegativeInfinity>,
711
- ] extends infer R extends [boolean, boolean, boolean, boolean]
712
- ? Or<
713
- And<IsEqual<R[0], true>, IsEqual<R[3], false>>,
714
- And<IsEqual<R[2], true>, IsEqual<R[1], false>>
715
- > extends true
716
- ? PositiveInfinity
717
- : Or<
718
- And<IsEqual<R[1], true>, IsEqual<R[2], false>>,
719
- And<IsEqual<R[3], true>, IsEqual<R[0], false>>
720
- > extends true
721
- ? NegativeInfinity
722
- : true extends R[number]
723
- ? number
724
- : ([IsNegative<A>, IsNegative<B>] extends infer R
725
- ? [false, false] extends R
726
- ? [...BuildTuple<A>, ...BuildTuple<B>]['length']
727
- : [true, true] extends R
728
- ? number
729
- : TupleMax<[NumberAbsolute<A>, NumberAbsolute<B>]> extends infer Max_
730
- ? TupleMin<[NumberAbsolute<A>, NumberAbsolute<B>]> extends infer Min_ extends number
731
- ? Max_ extends A | B
732
- ? Subtract<Max_, Min_>
733
- : number
734
- : never
735
- : never
736
- : never) & number
737
- : never;
648
+ type BuiltIns = Primitive | void | Date | RegExp;
649
+
650
+ /**
651
+ Matches non-recursive types.
652
+ */
653
+ type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown);
738
654
 
739
655
  /**
740
656
  Returns the difference between two numbers.
741
657
 
742
658
  Note:
743
659
  - A or B can only support `-999` ~ `999`.
744
- - If the result is negative, you can only get `number`.
745
660
 
746
661
  @example
747
662
  ```
@@ -754,7 +669,10 @@ Subtract<111, -222>;
754
669
  //=> 333
755
670
 
756
671
  Subtract<-111, 222>;
757
- //=> number
672
+ //=> -333
673
+
674
+ Subtract<18, 96>;
675
+ //=> -78
758
676
 
759
677
  Subtract<PositiveInfinity, 9999>;
760
678
  //=> PositiveInfinity
@@ -765,38 +683,53 @@ Subtract<PositiveInfinity, PositiveInfinity>;
765
683
 
766
684
  @category Numeric
767
685
  */
768
- // TODO: Support big integer and negative number.
769
- type Subtract<A extends number, B extends number> = number extends A | B
770
- ? number
771
- : [
772
- IsEqual<A, PositiveInfinity>, IsEqual<A, NegativeInfinity>,
773
- IsEqual<B, PositiveInfinity>, IsEqual<B, NegativeInfinity>,
774
- ] extends infer R extends [boolean, boolean, boolean, boolean]
775
- ? Or<
776
- And<IsEqual<R[0], true>, IsEqual<R[2], false>>,
777
- And<IsEqual<R[3], true>, IsEqual<R[1], false>>
778
- > extends true
779
- ? PositiveInfinity
780
- : Or<
781
- And<IsEqual<R[1], true>, IsEqual<R[3], false>>,
782
- And<IsEqual<R[2], true>, IsEqual<R[0], false>>
783
- > extends true
784
- ? NegativeInfinity
785
- : true extends R[number]
786
- ? number
787
- : [IsNegative<A>, IsNegative<B>] extends infer R
788
- ? [false, false] extends R
789
- ? BuildTuple<A> extends infer R
790
- ? R extends [...BuildTuple<B>, ...infer R]
791
- ? R['length']
792
- : number
793
- : never
794
- : LessThan<A, B> extends true
795
- ? number
796
- : [false, true] extends R
797
- ? Sum<A, NumberAbsolute<B>>
798
- : Subtract<NumberAbsolute<B>, NumberAbsolute<A>>
799
- : never
686
+ // TODO: Support big integer.
687
+ type Subtract<A extends number, B extends number> =
688
+ // Handle cases when A or B is the actual "number" type
689
+ number extends A | B ? number
690
+ // Handle cases when A and B are both +/- infinity
691
+ : A extends B & (PositiveInfinity | NegativeInfinity) ? number
692
+ // Handle cases when A is - infinity or B is + infinity
693
+ : A extends NegativeInfinity ? NegativeInfinity : B extends PositiveInfinity ? NegativeInfinity
694
+ // Handle cases when A is + infinity or B is - infinity
695
+ : A extends PositiveInfinity ? PositiveInfinity : B extends NegativeInfinity ? PositiveInfinity
696
+ // Handle case when numbers are equal to each other
697
+ : A extends B ? 0
698
+ // Handle cases when A or B is 0
699
+ : A extends 0 ? ReverseSign<B> : B extends 0 ? A
700
+ // Handle remaining regular cases
701
+ : SubtractPostChecks<A, B>;
702
+
703
+ /**
704
+ Subtracts two numbers A and B, such that they are not equal and neither of them are 0, +/- infinity or the `number` type
705
+ */
706
+ type SubtractPostChecks<A extends number, B extends number, AreNegative = [IsNegative<A>, IsNegative<B>]> =
707
+ AreNegative extends [false, false]
708
+ ? SubtractPositives<A, B>
709
+ : AreNegative extends [true, true]
710
+ // When both numbers are negative we subtract the absolute values and then reverse the sign
711
+ ? ReverseSign<SubtractPositives<NumberAbsolute<A>, NumberAbsolute<B>>>
712
+ // When the signs are different we can add the absolute values and then reverse the sign if A < B
713
+ : [...BuildTuple<NumberAbsolute<A>>, ...BuildTuple<NumberAbsolute<B>>] extends infer R extends unknown[]
714
+ ? LessThan<A, B> extends true ? ReverseSign<R['length']> : R['length']
715
+ : never;
716
+
717
+ /**
718
+ Subtracts two positive numbers.
719
+ */
720
+ type SubtractPositives<A extends number, B extends number> =
721
+ LessThan<A, B> extends true
722
+ // When A < B we can reverse the result of B - A
723
+ ? ReverseSign<SubtractIfAGreaterThanB<B, A>>
724
+ : SubtractIfAGreaterThanB<A, B>;
725
+
726
+ /**
727
+ Subtracts two positive numbers A and B such that A > B.
728
+ */
729
+ type SubtractIfAGreaterThanB<A extends number, B extends number> =
730
+ // This is where we always want to end up and do the actual subtraction
731
+ BuildTuple<A> extends [...BuildTuple<B>, ...infer R]
732
+ ? R['length']
800
733
  : never;
801
734
 
802
735
  /**
@@ -1040,13 +973,7 @@ type InternalPaths<T, Options extends Required<PathsOptions>> =
1040
973
  bracketNotation: Options['bracketNotation'];
1041
974
  maxRecursionDepth: Subtract<MaxDepth, 1>;
1042
975
  leavesOnly: Options['leavesOnly'];
1043
- depth: Options['depth'] extends infer Depth extends number // For distributing `Options['depth']`
1044
- ? Depth extends 0 // Don't subtract further if `Depth` has reached `0`
1045
- ? never
1046
- : ToString<Depth> extends `-${number}` // Don't subtract if `Depth` is -ve
1047
- ? never
1048
- : Subtract<Options['depth'], 1> // If `Subtract` supported -ve numbers, then `depth` could have simply been `Subtract<Options['depth'], 1>`
1049
- : never; // Should never happen
976
+ depth: Subtract<Options['depth'], 1>;
1050
977
  }> extends infer SubPath
1051
978
  ? SubPath extends string | number
1052
979
  ? (
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/package",
3
- "version": "3.5.2",
3
+ "version": "3.5.4",
4
4
  "description": "One Package to rule them all, finds your root-dir, monorepo, or package manager.",
5
5
  "keywords": [
6
6
  "anolilab",
@@ -146,9 +146,9 @@
146
146
  ],
147
147
  "dependencies": {
148
148
  "@antfu/install-pkg": "^1.0.0",
149
- "@inquirer/confirm": "^5.1.6",
150
- "@visulima/fs": "3.1.1",
151
- "@visulima/path": "1.3.4",
149
+ "@inquirer/confirm": "^5.1.7",
150
+ "@visulima/fs": "3.1.2",
151
+ "@visulima/path": "1.3.5",
152
152
  "normalize-package-data": "^7.0.0"
153
153
  },
154
154
  "engines": {