mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-09 17:23:53 +01:00
MISC: HGWOptions accepts non integer (#1035)
This commit is contained in:
parent
65214c0322
commit
fccc27fe58
@ -18,5 +18,5 @@ interface BasicHGWOptions
|
|||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| [additionalMsec?](./bitburner.basichgwoptions.additionalmsec.md) | | number | _(Optional)_ Number of additional milliseconds that will be spent waiting between the start of the function and when it completes. |
|
| [additionalMsec?](./bitburner.basichgwoptions.additionalmsec.md) | | number | _(Optional)_ Number of additional milliseconds that will be spent waiting between the start of the function and when it completes. |
|
||||||
| [stock?](./bitburner.basichgwoptions.stock.md) | | boolean | _(Optional)_ Set to true this action will affect the stock market. |
|
| [stock?](./bitburner.basichgwoptions.stock.md) | | boolean | _(Optional)_ Set to true this action will affect the stock market. |
|
||||||
| [threads?](./bitburner.basichgwoptions.threads.md) | | number | _(Optional)_ Number of threads to use for this function. Must be less than or equal to the number of threads the script is running with. |
|
| [threads?](./bitburner.basichgwoptions.threads.md) | | number | _(Optional)_ Number of threads to use for this function. Must be less than or equal to the number of threads the script is running with. Accepts positive non integer values. |
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## BasicHGWOptions.threads property
|
## BasicHGWOptions.threads property
|
||||||
|
|
||||||
Number of threads to use for this function. Must be less than or equal to the number of threads the script is running with.
|
Number of threads to use for this function. Must be less than or equal to the number of threads the script is running with. Accepts positive non integer values.
|
||||||
|
|
||||||
**Signature:**
|
**Signature:**
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ import { HacknetServer } from "../Hacknet/HacknetServer";
|
|||||||
import { BaseServer } from "../Server/BaseServer";
|
import { BaseServer } from "../Server/BaseServer";
|
||||||
import { dialogBoxCreate } from "../ui/React/DialogBox";
|
import { dialogBoxCreate } from "../ui/React/DialogBox";
|
||||||
import { RamCostConstants } from "./RamCostGenerator";
|
import { RamCostConstants } from "./RamCostGenerator";
|
||||||
import { isPositiveInteger, PositiveInteger, Unknownify } from "../types";
|
import { isPositiveInteger, PositiveInteger, Unknownify, isPositiveNumber, PositiveNumber } from "../types";
|
||||||
import { Engine } from "../engine";
|
import { Engine } from "../engine";
|
||||||
import { resolveFilePath, FilePath } from "../Paths/FilePath";
|
import { resolveFilePath, FilePath } from "../Paths/FilePath";
|
||||||
import { hasScriptExtension, ScriptFilePath } from "../Paths/ScriptFilePath";
|
import { hasScriptExtension, ScriptFilePath } from "../Paths/ScriptFilePath";
|
||||||
@ -87,7 +87,7 @@ export interface CompleteSpawnOptions extends CompleteRunOptions {
|
|||||||
}
|
}
|
||||||
/** HGWOptions with non-optional, type-validated members, for passing between internal functions. */
|
/** HGWOptions with non-optional, type-validated members, for passing between internal functions. */
|
||||||
export interface CompleteHGWOptions {
|
export interface CompleteHGWOptions {
|
||||||
threads: PositiveInteger;
|
threads: PositiveNumber;
|
||||||
stock: boolean;
|
stock: boolean;
|
||||||
additionalMsec: number;
|
additionalMsec: number;
|
||||||
}
|
}
|
||||||
@ -146,7 +146,14 @@ function positiveInteger(ctx: NetscriptContext, argName: string, v: unknown): Po
|
|||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
/** Convert provided value v for argument argName to a positive number, throwing if it looks like something else. */
|
||||||
|
function positiveNumber(ctx: NetscriptContext, argName: string, v: unknown): PositiveNumber {
|
||||||
|
const n = number(ctx, argName, v);
|
||||||
|
if (!isPositiveNumber(n)) {
|
||||||
|
throw makeRuntimeErrorMsg(ctx, `${argName} should be a positive number, was ${n}`, "TYPE");
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
/** Returns args back if it is a ScriptArg[]. Throws an error if it is not. */
|
/** Returns args back if it is a ScriptArg[]. Throws an error if it is not. */
|
||||||
function scriptArgs(ctx: NetscriptContext, args: unknown) {
|
function scriptArgs(ctx: NetscriptContext, args: unknown) {
|
||||||
if (!isScriptArgs(args)) throw makeRuntimeErrorMsg(ctx, "'args' is not an array of script args", "TYPE");
|
if (!isScriptArgs(args)) throw makeRuntimeErrorMsg(ctx, "'args' is not an array of script args", "TYPE");
|
||||||
@ -322,7 +329,7 @@ function validateHGWOptions(ctx: NetscriptContext, opts: unknown): CompleteHGWOp
|
|||||||
if (!requestedThreads) {
|
if (!requestedThreads) {
|
||||||
result.threads = (isNaN(threads) || threads < 1 ? 1 : threads) as PositiveInteger;
|
result.threads = (isNaN(threads) || threads < 1 ? 1 : threads) as PositiveInteger;
|
||||||
} else {
|
} else {
|
||||||
const positiveThreads = positiveInteger(ctx, "opts.threads", requestedThreads);
|
const positiveThreads = positiveNumber(ctx, "opts.threads", requestedThreads);
|
||||||
if (positiveThreads > threads) {
|
if (positiveThreads > threads) {
|
||||||
throw makeRuntimeErrorMsg(
|
throw makeRuntimeErrorMsg(
|
||||||
ctx,
|
ctx,
|
||||||
|
4
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
4
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
@ -345,7 +345,9 @@ interface CrimeStats {
|
|||||||
*/
|
*/
|
||||||
interface BasicHGWOptions {
|
interface BasicHGWOptions {
|
||||||
/** Number of threads to use for this function.
|
/** Number of threads to use for this function.
|
||||||
* Must be less than or equal to the number of threads the script is running with. */
|
* Must be less than or equal to the number of threads the script is running with.
|
||||||
|
* Accepts positive non integer values.
|
||||||
|
*/
|
||||||
threads?: number;
|
threads?: number;
|
||||||
/** Set to true this action will affect the stock market. */
|
/** Set to true this action will affect the stock market. */
|
||||||
stock?: boolean;
|
stock?: boolean;
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
// The object properties on these numeric types are for typechecking only and do not exist at runtime. They're just a way to require a typechecking function.
|
// The object properties on these numeric types are for typechecking only and do not exist at runtime. They're just a way to require a typechecking function.
|
||||||
export type Integer = number & { __Integer: true };
|
export type Integer = number & { __Integer: true };
|
||||||
|
export type SafeInteger = Integer & { __isSafe: true };
|
||||||
export type PositiveNumber = number & { __Positive: true };
|
export type PositiveNumber = number & { __Positive: true };
|
||||||
export type PositiveInteger = Integer & PositiveNumber;
|
export type PositiveInteger = Integer & PositiveNumber;
|
||||||
|
export type PositiveSafeInteger = PositiveInteger & SafeInteger;
|
||||||
|
|
||||||
// Numeric typechecking functions - these should be moved somewhere else
|
// Numeric typechecking functions - these should be moved somewhere else
|
||||||
|
export const isNumber = (n: unknown): n is number => !Number.isNaN(Number(n));
|
||||||
export const isInteger = (n: unknown): n is Integer => Number.isInteger(n);
|
export const isInteger = (n: unknown): n is Integer => Number.isInteger(n);
|
||||||
|
export const isSafeInteger = (n: unknown): n is SafeInteger => Number.isSafeInteger(n);
|
||||||
export const isPositiveInteger = (n: unknown): n is PositiveInteger => isInteger(n) && n > 0;
|
export const isPositiveInteger = (n: unknown): n is PositiveInteger => isInteger(n) && n > 0;
|
||||||
|
export const isPositiveNumber = (n: unknown): n is PositiveNumber => isNumber(n) && n > 0;
|
||||||
|
export const isPositiveSafeInteger = (n: unknown): n is PositiveSafeInteger => isSafeInteger(n) && isPositiveInteger(n);
|
||||||
/** Utility type for typechecking objects. Makes all keys optional and sets values to unknown,
|
/** Utility type for typechecking objects. Makes all keys optional and sets values to unknown,
|
||||||
* making it safe to assert a shape for the variable once it's known to be a non-null object */
|
* making it safe to assert a shape for the variable once it's known to be a non-null object */
|
||||||
export type Unknownify<T> = {
|
export type Unknownify<T> = {
|
||||||
|
Loading…
Reference in New Issue
Block a user