Skip to content

Commit 00d8d7e

Browse files
authored
refactor: extract normalization core package
Extract shared normalization/coercion helpers into private @openclaw/normalization-core workspace package while preserving existing plugin SDK helper subpaths.\n\nAlso keeps direct normalization-core imports internal, wires UI/build/loader resolution, and replaces the slow PR network CodeQL lane with a fast added-line boundary scan while retaining full CodeQL for scheduled/manual runs.\n\nVerification: local moved tests, plugin SDK boundary tests, extension loader tests, agents-support shard, UI build/test, build artifacts, lint, workflow guards, autoreview, and GitHub CI passed on PR head 963d893.
1 parent 94814f3 commit 00d8d7e

1,537 files changed

Lines changed: 3714 additions & 2655 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/codeql/codeql-network-runtime-boundary-critical-quality.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,16 @@ queries:
77
- uses: ./.github/codeql/openclaw-boundary/queries/managed-proxy-runtime-mutation.ql
88

99
paths:
10-
- src
11-
- extensions
10+
- src/cli/gateway-cli/run-loop.ts
11+
- src/infra/gateway-lock.ts
12+
- src/infra/jsonl-socket.ts
13+
- src/infra/net
14+
- src/infra/push-apns-http2.ts
15+
- src/infra/ssh-tunnel.ts
16+
- src/proxy-capture
17+
- extensions/codex-supervisor/src/json-rpc-client.ts
18+
- extensions/irc/src
19+
- extensions/qa-lab/src
1220
- packages/net-policy/src
1321

1422
paths-ignore:

.github/workflows/codeql-critical-quality.yml

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,9 @@ jobs:
210210
else
211211
while IFS= read -r file; do
212212
case "${file}" in
213+
.github/codeql/codeql-network-runtime-boundary-critical-quality.yml|.github/codeql/openclaw-boundary/queries/raw-socket-callsite-classification.ql|.github/codeql/openclaw-boundary/queries/managed-proxy-runtime-mutation.ql)
214+
network_runtime=true
215+
;;
213216
.github/codeql/*|.github/workflows/codeql-critical-quality.yml)
214217
agent=true
215218
channel=true
@@ -222,7 +225,6 @@ jobs:
222225
plugin_sdk_package=true
223226
plugin_sdk_reply=true
224227
provider=true
225-
network_runtime=true
226228
session_diagnostics=true
227229
;;
228230
src/agents/sessions/tools/*)
@@ -304,7 +306,7 @@ jobs:
304306
case "${file}" in
305307
src/**/*.test.ts|src/**/*.test.tsx|extensions/**/*.test.ts|extensions/**/*.test.tsx)
306308
;;
307-
src/*.ts|src/**/*.ts|extensions/*.ts|extensions/**/*.ts|packages/net-policy/src/*|packages/net-policy/src/**/*)
309+
packages/net-policy/src/*|packages/net-policy/src/**/*|src/cli/gateway-cli/run-loop.ts|src/infra/net/*|src/infra/net/**/*|src/infra/ssh-tunnel.ts|src/infra/gateway-lock.ts|src/infra/jsonl-socket.ts|src/infra/push-apns-http2.ts|src/proxy-capture/*|src/proxy-capture/**/*|extensions/codex-supervisor/src/json-rpc-client.ts|extensions/irc/src/*|extensions/qa-lab/src/*)
308310
network_runtime=true
309311
;;
310312
esac
@@ -431,20 +433,48 @@ jobs:
431433
with:
432434
submodules: false
433435

436+
- name: Fast PR network boundary diff scan
437+
if: ${{ github.event_name == 'pull_request' }}
438+
env:
439+
GH_TOKEN: ${{ github.token }}
440+
PR_NUMBER: ${{ github.event.pull_request.number }}
441+
REPOSITORY: ${{ github.repository }}
442+
run: |
443+
set -euo pipefail
444+
445+
added_lines="$(mktemp)"
446+
gh api --paginate "repos/${REPOSITORY}/pulls/${PR_NUMBER}/files" --jq '
447+
.[]
448+
| select(.filename | test("^(src/cli/gateway-cli/run-loop\\.ts|src/infra/(gateway-lock|jsonl-socket|push-apns-http2|ssh-tunnel)\\.ts|src/infra/net/|src/proxy-capture/|extensions/codex-supervisor/src/json-rpc-client\\.ts|extensions/irc/src/|extensions/qa-lab/src/|packages/net-policy/src/)"))
449+
| .filename as $file
450+
| (.patch // "")
451+
| split("\n")[]
452+
| select(startswith("+") and (startswith("+++") | not))
453+
| "\($file): \(.)"
454+
' > "$added_lines"
455+
456+
if grep -En '(from|require\().*["'\''](node:)?(net|tls|http2)["'\'']|\b(net|tls|http2)\.(connect|createConnection)\b|new Socket\(|HTTP_PROXY|HTTPS_PROXY|NO_PROXY|GLOBAL_AGENT_|OPENCLAW_PROXY_' "$added_lines"; then
457+
echo "Network runtime boundary-sensitive added lines require full CodeQL review." >&2
458+
exit 1
459+
fi
460+
434461
- name: Initialize CodeQL
462+
if: ${{ github.event_name != 'pull_request' }}
435463
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
436464
with:
437465
languages: javascript-typescript
438466
config-file: ./.github/codeql/codeql-network-runtime-boundary-critical-quality.yml
439467

440468
- name: Analyze
441469
id: analyze
470+
if: ${{ github.event_name != 'pull_request' }}
442471
uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
443472
with:
444473
output: sarif-results
445474
category: "/codeql-critical-quality/network-runtime-boundary"
446475

447476
- name: Fail on network runtime boundary findings
477+
if: ${{ github.event_name != 'pull_request' }}
448478
env:
449479
SARIF_OUTPUT: sarif-results
450480
run: |

extensions/tsconfig.package-boundary.paths.json

Lines changed: 59 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@
22
"extends": "../tsconfig.json",
33
"compilerOptions": {
44
"paths": {
5-
"openclaw/extension-api": ["../src/extensionAPI.ts"],
6-
"openclaw/plugin-sdk": ["../dist/plugin-sdk/index.d.ts"],
7-
"openclaw/plugin-sdk/*": ["../dist/plugin-sdk/*.d.ts"],
5+
"openclaw/extension-api": [
6+
"../src/extensionAPI.ts"
7+
],
8+
"openclaw/plugin-sdk": [
9+
"../dist/plugin-sdk/index.d.ts"
10+
],
11+
"openclaw/plugin-sdk/*": [
12+
"../dist/plugin-sdk/*.d.ts"
13+
],
814
"openclaw/plugin-sdk/reply-payload-testing": [
915
"../packages/plugin-sdk/dist/src/plugin-sdk/reply-payload-testing.d.ts"
1016
],
@@ -29,9 +35,6 @@
2935
"openclaw/plugin-sdk/plugin-test-contracts": [
3036
"../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-contracts.d.ts"
3137
],
32-
"openclaw/plugin-sdk/plugin-state-test-runtime": [
33-
"../packages/plugin-sdk/dist/src/plugin-sdk/plugin-state-test-runtime.d.ts"
34-
],
3538
"openclaw/plugin-sdk/plugin-test-runtime": [
3639
"../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-runtime.d.ts"
3740
],
@@ -53,10 +56,15 @@
5356
"openclaw/plugin-sdk/testing": [
5457
"../packages/plugin-sdk/dist/src/plugin-sdk/testing.d.ts"
5558
],
59+
"openclaw/plugin-sdk/plugin-state-test-runtime": [
60+
"../packages/plugin-sdk/dist/src/plugin-sdk/plugin-state-test-runtime.d.ts"
61+
],
5662
"openclaw/plugin-sdk/channel-contract-testing": [
5763
"../packages/plugin-sdk/dist/src/plugin-sdk/channel-contract-testing.d.ts"
5864
],
59-
"openclaw/plugin-sdk/account-id": ["../dist/plugin-sdk/account-id.d.ts"],
65+
"openclaw/plugin-sdk/account-id": [
66+
"../dist/plugin-sdk/account-id.d.ts"
67+
],
6068
"openclaw/plugin-sdk/channel-entry-contract": [
6169
"../dist/plugin-sdk/channel-entry-contract.d.ts"
6270
],
@@ -75,7 +83,9 @@
7583
"openclaw/plugin-sdk/channel-streaming": [
7684
"../dist/plugin-sdk/channel-streaming.d.ts"
7785
],
78-
"openclaw/plugin-sdk/error-runtime": ["../dist/plugin-sdk/error-runtime.d.ts"],
86+
"openclaw/plugin-sdk/error-runtime": [
87+
"../dist/plugin-sdk/error-runtime.d.ts"
88+
],
7989
"openclaw/plugin-sdk/provider-catalog-shared": [
8090
"../dist/plugin-sdk/provider-catalog-shared.d.ts"
8191
],
@@ -85,23 +95,39 @@
8595
"openclaw/plugin-sdk/secret-ref-runtime": [
8696
"../dist/plugin-sdk/secret-ref-runtime.d.ts"
8797
],
88-
"openclaw/plugin-sdk/ssrf-runtime": ["../dist/plugin-sdk/ssrf-runtime.d.ts"],
89-
"@openclaw/qa-channel/api.js": ["../dist/plugin-sdk/extensions/qa-channel/api.d.ts"],
90-
"@openclaw/discord/api.js": ["../dist/plugin-sdk/extensions/discord/api.d.ts"],
91-
"@openclaw/slack/api.js": ["../dist/plugin-sdk/extensions/slack/api.d.ts"],
92-
"@openclaw/whatsapp/api.js": ["../dist/plugin-sdk/extensions/whatsapp/api.d.ts"],
93-
"@openclaw/llm-core": ["../dist/plugin-sdk/packages/llm-core/src/index.d.ts"],
98+
"openclaw/plugin-sdk/ssrf-runtime": [
99+
"../dist/plugin-sdk/ssrf-runtime.d.ts"
100+
],
101+
"@openclaw/qa-channel/api.js": [
102+
"../dist/plugin-sdk/extensions/qa-channel/api.d.ts"
103+
],
104+
"@openclaw/discord/api.js": [
105+
"../dist/plugin-sdk/extensions/discord/api.d.ts"
106+
],
107+
"@openclaw/slack/api.js": [
108+
"../dist/plugin-sdk/extensions/slack/api.d.ts"
109+
],
110+
"@openclaw/whatsapp/api.js": [
111+
"../dist/plugin-sdk/extensions/whatsapp/api.d.ts"
112+
],
113+
"@openclaw/llm-core": [
114+
"../dist/plugin-sdk/packages/llm-core/src/index.d.ts"
115+
],
94116
"@openclaw/llm-core/diagnostics": [
95117
"../dist/plugin-sdk/packages/llm-core/src/utils/diagnostics.d.ts"
96118
],
97119
"@openclaw/llm-core/event-stream": [
98120
"../dist/plugin-sdk/packages/llm-core/src/utils/event-stream.d.ts"
99121
],
100-
"@openclaw/llm-core/types": ["../dist/plugin-sdk/packages/llm-core/src/types.d.ts"],
122+
"@openclaw/llm-core/types": [
123+
"../dist/plugin-sdk/packages/llm-core/src/types.d.ts"
124+
],
101125
"@openclaw/llm-core/validation": [
102126
"../dist/plugin-sdk/packages/llm-core/src/validation.d.ts"
103127
],
104-
"@openclaw/llm-core/*": ["../dist/plugin-sdk/packages/llm-core/src/*.d.ts"],
128+
"@openclaw/llm-core/*": [
129+
"../dist/plugin-sdk/packages/llm-core/src/*.d.ts"
130+
],
105131
"@openclaw/model-catalog-core": [
106132
"../dist/plugin-sdk/packages/model-catalog-core/src/index.d.ts"
107133
],
@@ -234,14 +260,26 @@
234260
"@openclaw/terminal-core/*": [
235261
"../dist/plugin-sdk/packages/terminal-core/src/*.d.ts"
236262
],
237-
"@openclaw/*.js": ["../packages/plugin-sdk/dist/extensions/*.d.ts", "../extensions/*"],
238-
"@openclaw/*": ["../packages/plugin-sdk/dist/extensions/*", "../extensions/*"],
239-
"openclaw/plugin-sdk/qa-channel": ["../dist/plugin-sdk/src/plugin-sdk/qa-channel.d.ts"],
263+
"@openclaw/*.js": [
264+
"../packages/plugin-sdk/dist/extensions/*.d.ts",
265+
"../extensions/*"
266+
],
267+
"@openclaw/*": [
268+
"../packages/plugin-sdk/dist/extensions/*",
269+
"../extensions/*"
270+
],
271+
"openclaw/plugin-sdk/qa-channel": [
272+
"../dist/plugin-sdk/src/plugin-sdk/qa-channel.d.ts"
273+
],
240274
"openclaw/plugin-sdk/qa-channel-protocol": [
241275
"../dist/plugin-sdk/src/plugin-sdk/qa-channel-protocol.d.ts"
242276
],
243-
"openclaw/plugin-sdk/qa-runtime": ["../dist/plugin-sdk/src/plugin-sdk/qa-runtime.d.ts"],
244-
"@openclaw/plugin-sdk/*": ["../dist/plugin-sdk/*.d.ts"]
277+
"openclaw/plugin-sdk/qa-runtime": [
278+
"../dist/plugin-sdk/src/plugin-sdk/qa-runtime.d.ts"
279+
],
280+
"@openclaw/plugin-sdk/*": [
281+
"../dist/plugin-sdk/*.d.ts"
282+
]
245283
}
246284
}
247285
}

extensions/xai/tsconfig.json

Lines changed: 56 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@
33
"compilerOptions": {
44
"rootDir": ".",
55
"paths": {
6-
"openclaw/extension-api": ["../../src/extensionAPI.ts"],
7-
"openclaw/plugin-sdk": ["../../dist/plugin-sdk/index.d.ts"],
8-
"openclaw/plugin-sdk/*": ["../../dist/plugin-sdk/*.d.ts"],
6+
"openclaw/extension-api": [
7+
"../../src/extensionAPI.ts"
8+
],
9+
"openclaw/plugin-sdk": [
10+
"../../dist/plugin-sdk/index.d.ts"
11+
],
12+
"openclaw/plugin-sdk/*": [
13+
"../../dist/plugin-sdk/*.d.ts"
14+
],
915
"openclaw/plugin-sdk/reply-payload-testing": [
1016
"../../packages/plugin-sdk/dist/src/plugin-sdk/reply-payload-testing.d.ts"
1117
],
@@ -30,9 +36,6 @@
3036
"openclaw/plugin-sdk/plugin-test-contracts": [
3137
"../../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-contracts.d.ts"
3238
],
33-
"openclaw/plugin-sdk/plugin-state-test-runtime": [
34-
"../../packages/plugin-sdk/dist/src/plugin-sdk/plugin-state-test-runtime.d.ts"
35-
],
3639
"openclaw/plugin-sdk/plugin-test-runtime": [
3740
"../../packages/plugin-sdk/dist/src/plugin-sdk/plugin-test-runtime.d.ts"
3841
],
@@ -54,10 +57,15 @@
5457
"openclaw/plugin-sdk/testing": [
5558
"../../packages/plugin-sdk/dist/src/plugin-sdk/testing.d.ts"
5659
],
60+
"openclaw/plugin-sdk/plugin-state-test-runtime": [
61+
"../../packages/plugin-sdk/dist/src/plugin-sdk/plugin-state-test-runtime.d.ts"
62+
],
5763
"openclaw/plugin-sdk/channel-contract-testing": [
5864
"../../packages/plugin-sdk/dist/src/plugin-sdk/channel-contract-testing.d.ts"
5965
],
60-
"openclaw/plugin-sdk/account-id": ["../../dist/plugin-sdk/account-id.d.ts"],
66+
"openclaw/plugin-sdk/account-id": [
67+
"../../dist/plugin-sdk/account-id.d.ts"
68+
],
6169
"openclaw/plugin-sdk/channel-entry-contract": [
6270
"../../dist/plugin-sdk/channel-entry-contract.d.ts"
6371
],
@@ -70,29 +78,24 @@
7078
"openclaw/plugin-sdk/channel-streaming": [
7179
"../../dist/plugin-sdk/channel-streaming.d.ts"
7280
],
73-
"openclaw/plugin-sdk/cli-runtime": ["../../dist/plugin-sdk/cli-runtime.d.ts"],
7481
"openclaw/plugin-sdk/error-runtime": [
7582
"../../dist/plugin-sdk/error-runtime.d.ts"
7683
],
7784
"openclaw/plugin-sdk/provider-catalog-shared": [
7885
"../../dist/plugin-sdk/provider-catalog-shared.d.ts"
7986
],
80-
"openclaw/plugin-sdk/provider-env-vars": [
81-
"../../dist/plugin-sdk/provider-env-vars.d.ts"
82-
],
8387
"openclaw/plugin-sdk/provider-entry": [
8488
"../../dist/plugin-sdk/provider-entry.d.ts"
8589
],
86-
"openclaw/plugin-sdk/provider-web-search-contract": [
87-
"../../dist/plugin-sdk/provider-web-search-contract.d.ts"
88-
],
8990
"openclaw/plugin-sdk/secret-ref-runtime": [
9091
"../../dist/plugin-sdk/secret-ref-runtime.d.ts"
9192
],
9293
"openclaw/plugin-sdk/ssrf-runtime": [
9394
"../../dist/plugin-sdk/ssrf-runtime.d.ts"
9495
],
95-
"@openclaw/qa-channel/api.js": ["../../dist/plugin-sdk/extensions/qa-channel/api.d.ts"],
96+
"@openclaw/qa-channel/api.js": [
97+
"../../dist/plugin-sdk/extensions/qa-channel/api.d.ts"
98+
],
9699
"@openclaw/llm-core": [
97100
"../../dist/plugin-sdk/packages/llm-core/src/index.d.ts"
98101
],
@@ -243,23 +246,52 @@
243246
"@openclaw/terminal-core/*": [
244247
"../../dist/plugin-sdk/packages/terminal-core/src/*.d.ts"
245248
],
246-
"@openclaw/*.js": ["../../packages/plugin-sdk/dist/extensions/*.d.ts", "../*"],
247-
"@openclaw/*": ["../*"],
249+
"@openclaw/*.js": [
250+
"../../packages/plugin-sdk/dist/extensions/*.d.ts",
251+
"../*"
252+
],
253+
"@openclaw/*": [
254+
"../*"
255+
],
248256
"openclaw/plugin-sdk/qa-channel": [
249257
"../../dist/plugin-sdk/src/plugin-sdk/qa-channel.d.ts"
250258
],
251259
"openclaw/plugin-sdk/qa-channel-protocol": [
252260
"../../dist/plugin-sdk/src/plugin-sdk/qa-channel-protocol.d.ts"
253261
],
254-
"openclaw/plugin-sdk/qa-runtime": ["../../dist/plugin-sdk/src/plugin-sdk/qa-runtime.d.ts"],
255-
"@openclaw/plugin-sdk/*": ["../../dist/plugin-sdk/*.d.ts"],
256-
"@openclaw/anthropic-vertex/api.js": ["./.boundary-stubs/anthropic-vertex-api.d.ts"],
257-
"@openclaw/ollama/api.js": ["./.boundary-stubs/ollama-api.d.ts"],
258-
"@openclaw/ollama/runtime-api.js": ["./.boundary-stubs/ollama-runtime-api.d.ts"],
259-
"@openclaw/speech-core/runtime-api.js": ["./.boundary-stubs/speech-core-runtime-api.d.ts"]
262+
"openclaw/plugin-sdk/qa-runtime": [
263+
"../../dist/plugin-sdk/src/plugin-sdk/qa-runtime.d.ts"
264+
],
265+
"@openclaw/plugin-sdk/*": [
266+
"../../dist/plugin-sdk/*.d.ts"
267+
],
268+
"openclaw/plugin-sdk/cli-runtime": [
269+
"../../dist/plugin-sdk/cli-runtime.d.ts"
270+
],
271+
"openclaw/plugin-sdk/provider-env-vars": [
272+
"../../dist/plugin-sdk/provider-env-vars.d.ts"
273+
],
274+
"openclaw/plugin-sdk/provider-web-search-contract": [
275+
"../../dist/plugin-sdk/provider-web-search-contract.d.ts"
276+
],
277+
"@openclaw/anthropic-vertex/api.js": [
278+
"./.boundary-stubs/anthropic-vertex-api.d.ts"
279+
],
280+
"@openclaw/ollama/api.js": [
281+
"./.boundary-stubs/ollama-api.d.ts"
282+
],
283+
"@openclaw/ollama/runtime-api.js": [
284+
"./.boundary-stubs/ollama-runtime-api.d.ts"
285+
],
286+
"@openclaw/speech-core/runtime-api.js": [
287+
"./.boundary-stubs/speech-core-runtime-api.d.ts"
288+
]
260289
}
261290
},
262-
"include": ["./*.ts", "./src/**/*.ts"],
291+
"include": [
292+
"./*.ts",
293+
"./src/**/*.ts"
294+
],
263295
"exclude": [
264296
"./**/*.test.ts",
265297
"./dist/**",
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { MAX_DATE_TIMESTAMP_MS, MAX_TIMER_TIMEOUT_MS, MAX_TIMER_TIMEOUT_SECONDS, UNIX_EPOCH_ISO_STRING, addTimerTimeoutGraceMs, asDateTimestampMs, asFiniteNumber, asFiniteNumberInRange, asPositiveSafeInteger, asSafeIntegerInRange, clampPositiveTimerTimeoutMs, clampTimerTimeoutMs, finiteSecondsToTimerSafeMilliseconds, isFutureDateTimestampMs, nonNegativeSecondsToSafeMilliseconds, parseFiniteNumber, parseStrictFiniteNumber, parseStrictInteger, parseStrictNonNegativeInteger, parseStrictPositiveInteger, positiveSecondsToSafeMilliseconds, resolveDateTimestampMs, resolveExpiresAtMsFromDurationMs, resolveExpiresAtMsFromDurationOrEpoch, resolveExpiresAtMsFromDurationSeconds, resolveExpiresAtMsFromEpochSeconds, resolveIntegerOption, resolveNonNegativeIntegerOption, resolveOptionalIntegerOption, resolvePositiveTimerTimeoutMs, resolveTimerTimeoutMs, resolveTimestampMsToIsoString, timestampMsToIsoFileStamp, timestampMsToIsoString } from "./number-coercion.mjs";
2+
import { asNullableObjectRecord, asNullableRecord, asOptionalObjectRecord, asOptionalRecord, asRecord, isRecord, readStringField } from "./record-coerce.mjs";
3+
import { hasNonEmptyString, localeLowercasePreservingWhitespace, lowercasePreservingWhitespace, normalizeFastMode, normalizeLowercaseStringOrEmpty, normalizeNullableString, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeOptionalStringifiedId, normalizeOptionalThreadValue, normalizeStringifiedEntries, normalizeStringifiedOptionalString, readStringValue, resolvePrimaryStringValue } from "./string-coerce.mjs";
4+
import { normalizeArrayBackedTrimmedStringList, normalizeAtHashSlug, normalizeCsvOrLooseStringList, normalizeHyphenSlug, normalizeOptionalTrimmedStringList, normalizeSingleOrTrimmedStringList, normalizeSortedUniqueStringEntries, normalizeSortedUniqueTrimmedStringList, normalizeStringEntries, normalizeStringEntriesLower, normalizeTrimmedStringList, normalizeUniqueSingleOrTrimmedStringList, normalizeUniqueStringEntries, normalizeUniqueStringEntriesLower, normalizeUniqueTrimmedStringList, sortUniqueStrings, uniqueStrings, uniqueValues } from "./string-normalization.mjs";
5+
export { MAX_DATE_TIMESTAMP_MS, MAX_TIMER_TIMEOUT_MS, MAX_TIMER_TIMEOUT_SECONDS, UNIX_EPOCH_ISO_STRING, addTimerTimeoutGraceMs, asDateTimestampMs, asFiniteNumber, asFiniteNumberInRange, asNullableObjectRecord, asNullableRecord, asOptionalObjectRecord, asOptionalRecord, asPositiveSafeInteger, asRecord, asSafeIntegerInRange, clampPositiveTimerTimeoutMs, clampTimerTimeoutMs, finiteSecondsToTimerSafeMilliseconds, hasNonEmptyString, isFutureDateTimestampMs, isRecord, localeLowercasePreservingWhitespace, lowercasePreservingWhitespace, nonNegativeSecondsToSafeMilliseconds, normalizeArrayBackedTrimmedStringList, normalizeAtHashSlug, normalizeCsvOrLooseStringList, normalizeFastMode, normalizeHyphenSlug, normalizeLowercaseStringOrEmpty, normalizeNullableString, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeOptionalStringifiedId, normalizeOptionalThreadValue, normalizeOptionalTrimmedStringList, normalizeSingleOrTrimmedStringList, normalizeSortedUniqueStringEntries, normalizeSortedUniqueTrimmedStringList, normalizeStringEntries, normalizeStringEntriesLower, normalizeStringifiedEntries, normalizeStringifiedOptionalString, normalizeTrimmedStringList, normalizeUniqueSingleOrTrimmedStringList, normalizeUniqueStringEntries, normalizeUniqueStringEntriesLower, normalizeUniqueTrimmedStringList, parseFiniteNumber, parseStrictFiniteNumber, parseStrictInteger, parseStrictNonNegativeInteger, parseStrictPositiveInteger, positiveSecondsToSafeMilliseconds, readStringField, readStringValue, resolveDateTimestampMs, resolveExpiresAtMsFromDurationMs, resolveExpiresAtMsFromDurationOrEpoch, resolveExpiresAtMsFromDurationSeconds, resolveExpiresAtMsFromEpochSeconds, resolveIntegerOption, resolveNonNegativeIntegerOption, resolveOptionalIntegerOption, resolvePositiveTimerTimeoutMs, resolvePrimaryStringValue, resolveTimerTimeoutMs, resolveTimestampMsToIsoString, sortUniqueStrings, timestampMsToIsoFileStamp, timestampMsToIsoString, uniqueStrings, uniqueValues };

0 commit comments

Comments
 (0)