You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.5 KiB
54 lines
1.5 KiB
import type { AxelQuoteCliInput } from "@/lib/axel/client";
|
|
|
|
function readFlagValue(argv: string[], flag: string): string | undefined {
|
|
const idx = argv.indexOf(flag);
|
|
if (idx < 0) {
|
|
return undefined;
|
|
}
|
|
return argv[idx + 1];
|
|
}
|
|
|
|
function readNumberFlag(argv: string[], flag: string): number | undefined {
|
|
const raw = readFlagValue(argv, flag);
|
|
if (raw == null) {
|
|
return undefined;
|
|
}
|
|
const n = Number(raw);
|
|
return Number.isFinite(n) ? n : undefined;
|
|
}
|
|
|
|
export function parseQuoteCliArgs(argv: string[]): AxelQuoteCliInput {
|
|
const origin = readFlagValue(argv, "--origin");
|
|
const dest = readFlagValue(argv, "--dest");
|
|
if (!origin?.trim() || !dest?.trim()) {
|
|
throw new Error(
|
|
"用法: npm run quote -- --origin \"提货地址\" --dest \"派送地址\" --pallets 2 --weight 500 [--length 48 --width 40 --height 45]",
|
|
);
|
|
}
|
|
|
|
const pallets = readNumberFlag(argv, "--pallets");
|
|
const weightLb = readNumberFlag(argv, "--weight");
|
|
if (pallets == null || pallets <= 0) {
|
|
throw new Error("--pallets 须为正整数");
|
|
}
|
|
if (weightLb == null || weightLb <= 0) {
|
|
throw new Error("--weight 须为正数(磅)");
|
|
}
|
|
|
|
const lengthIn = readNumberFlag(argv, "--length");
|
|
const widthIn = readNumberFlag(argv, "--width");
|
|
const heightIn = readNumberFlag(argv, "--height");
|
|
const storageStatePath = readFlagValue(argv, "--storage");
|
|
|
|
return {
|
|
origin: origin.trim(),
|
|
dest: dest.trim(),
|
|
pallets: Math.floor(pallets),
|
|
weightLb,
|
|
lengthIn,
|
|
widthIn,
|
|
heightIn,
|
|
storageStatePath,
|
|
};
|
|
}
|