@@ -8,10 +8,6 @@ import {
|
8 | 8 | resolveNodeFromNodeList, |
9 | 9 | type NodeMatchCandidate, |
10 | 10 | } from "openclaw/plugin-sdk/gateway-runtime"; |
11 | | -import { |
12 | | -parseStrictFiniteNumber, |
13 | | -parseStrictPositiveInteger, |
14 | | -} from "openclaw/plugin-sdk/infra-runtime"; |
15 | 11 | import { defaultRuntime } from "openclaw/plugin-sdk/runtime"; |
16 | 12 | import { |
17 | 13 | normalizeLowercaseStringOrEmpty, |
@@ -74,6 +70,41 @@ export type CanvasCliDependencies = {
|
74 | 70 | type CanvasNodeCandidate = NodeMatchCandidate; |
75 | 71 | type CanvasSnapshotRequestFormat = "png" | "jpeg"; |
76 | 72 | |
| 73 | +function normalizeNumericString(value: string): string | undefined { |
| 74 | +const trimmed = value.trim(); |
| 75 | +return trimmed ? trimmed : undefined; |
| 76 | +} |
| 77 | + |
| 78 | +function parseStrictPositiveInteger(value: unknown): number | undefined { |
| 79 | +if (typeof value === "number") { |
| 80 | +return Number.isSafeInteger(value) && value > 0 ? value : undefined; |
| 81 | +} |
| 82 | +if (typeof value !== "string") { |
| 83 | +return undefined; |
| 84 | +} |
| 85 | +const normalized = normalizeNumericString(value); |
| 86 | +if (!normalized || !/^\+?\d+$/.test(normalized)) { |
| 87 | +return undefined; |
| 88 | +} |
| 89 | +const parsed = Number(normalized); |
| 90 | +return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined; |
| 91 | +} |
| 92 | + |
| 93 | +function parseStrictFiniteNumber(value: unknown): number | undefined { |
| 94 | +if (typeof value === "number") { |
| 95 | +return Number.isFinite(value) ? value : undefined; |
| 96 | +} |
| 97 | +if (typeof value !== "string") { |
| 98 | +return undefined; |
| 99 | +} |
| 100 | +const normalized = normalizeNumericString(value); |
| 101 | +if (!normalized || !/^[+-]?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:e[+-]?\d+)?$/i.test(normalized)) { |
| 102 | +return undefined; |
| 103 | +} |
| 104 | +const parsed = Number(normalized); |
| 105 | +return Number.isFinite(parsed) ? parsed : undefined; |
| 106 | +} |
| 107 | + |
77 | 108 | function parseCanvasSnapshotRequestFormat(raw: unknown): CanvasSnapshotRequestFormat { |
78 | 109 | const format = normalizeLowercaseStringOrEmpty(normalizeOptionalString(raw) ?? "jpg"); |
79 | 110 | switch (format) { |
|