Files
SnowLuma/packages/onebot/tests/helpers/compiled-action-handler.ts
DrSmoothl f6adadcd12 refactor(onebot): declare every action param the handler reads
Action handlers now only see fields from the param table. Extra client
keys are still ignored. Garbage values on declared numbers fail instead
of becoming zero.
2026-08-30 00:56:01 +08:00

34 lines
1.2 KiB
TypeScript

import { defineAction, type RegisteredActionSpec } from '../../src/action-kit';
import { ApiHandler, type ApiActionContext } from '../../src/api-handler';
import { compileActionRegistry, RAW_ACTION_RESERVATIONS } from '../../src/actions';
import type { ApiResponse, JsonObject } from '../../src/types';
type TestActionRun = (
params: JsonObject,
context: ApiActionContext,
) => Promise<ApiResponse> | ApiResponse;
/** A test-only normal ActionSpec that still travels through the complete
* compiled-registry constructor path. */
export function testAction(name: string, run: TestActionRun): RegisteredActionSpec {
return defineAction({
name,
params: {},
run: (params, context) => run(params, context),
});
}
/** Construct an ApiHandler from an isolated but complete namespace. The raw
* quick-operation reservation is mandatory, matching the production shape. */
export function createCompiledTestHandler(
context: ApiActionContext,
specs: readonly RegisteredActionSpec[] = [],
uin?: number,
): ApiHandler {
const registry = compileActionRegistry(
[{ category: 'test', actions: specs }],
RAW_ACTION_RESERVATIONS,
);
return new ApiHandler(context, uin, registry);
}