Skip to content
中文

walkRules ​

CORE · function · Runtime value

Walk every rule in order, mutating the shared input.

Later rules observe the mutations of earlier ones, which is why traversal is strictly sequential and every participant must be synchronous. Throwing stops the walk immediately; remaining rules are skipped. Walk every rule in order, mutating the shared input.

Import ​

ts
import { walkRules } from '@jangts/agent-core/support';
js
import { walkRules } from '@jangts/agent-core/support';

Other public entry points:@jangts/agent-core, @jangts/agent-core/types, @jangts/agent-core/support.

Definition ​

Overload 1 ​

ts
walkRules(rules: readonly WalkRule[]): void

Walk every rule in order, mutating the shared input.

Later rules observe the mutations of earlier ones, which is why traversal is strictly sequential and every participant must be synchronous. Throwing stops the walk immediately; remaining rules are skipped.

ParameterTypePassingDescription
rulesreadonly WalkRule<void>[]Required—

Returns: void.

Overload 2 ​

ts
walkRules<Input>(rules: readonly WalkRule<Input>[], input: Input): void

Walk every rule in order, mutating the shared input.

Type parameterConstraintDefault type
Input——
ParameterTypePassingDescription
rulesreadonly WalkRule<Input>[]Required—
inputInputRequired—

Returns: void.

Examples ​

One explicit rejection ​

Beginner · Node.js

ts
import { Support } from '@jangts/agent-core';
const input = '你好';
Support.breakWhile(!input.trim(), '问题不能为空');
console.log(input);
js
import { Support } from '@jangts/agent-core';
const input = '你好';
Support.breakWhile(!input.trim(), '问题不能为空');
console.log(input);

Checks with dependencies evaluated in order ​

Configuration · Node.js

ts
import { Support } from '@jangts/agent-core';
const input: unknown = { name: 'Ivan' };
Support.breakWhile([
  { occur: !input || typeof input !== 'object', error: '需要对象' },
  { occur: () => !('name' in (input as object)), error: '缺少 name' },
]);
console.log(input);
js
import { Support } from '@jangts/agent-core';
const input = { name: 'Ivan' };
Support.breakWhile([
    { occur: !input || typeof input !== 'object', error: '需要对象' },
    { occur: () => !('name' in input), error: '缺少 name' },
]);
console.log(input);

Declarative priority dispatch and sequential transformation ​

Extension · Node.js

ts
import { Support } from '@jangts/agent-core';
const routeName = Support.matchRule([
  { id: 'status', description: '状态意图', pattern: (input: string) => input === 'status', handle: () => 'service' },
  { id: 'fallback', description: '其他意图', handle: () => 'reply' },
], 'status');
const state = { answer: '  服务正常  ' };
Support.walkRules([
  { handle: (value: typeof state) => { value.answer = value.answer.trim(); } },
  { pattern: (value: typeof state) => !!value.answer, handle: value => { value.answer += '。'; } },
], state);
console.log(routeName, state.answer);
js
import { Support } from '@jangts/agent-core';
const routeName = Support.matchRule([
    { id: 'status', description: '状态意图', pattern: (input) => input === 'status', handle: () => 'service' },
    { id: 'fallback', description: '其他意图', handle: () => 'reply' },
], 'status');
const state = { answer: '  服务正常  ' };
Support.walkRules([
    { handle: (value) => { value.answer = value.answer.trim(); } },
    { pattern: (value) => !!value.answer, handle: value => { value.answer += '。'; } },
], state);
console.log(routeName, state.answer);

API reference, usage examples and developer guides.