siyuan-note/siyuan · error

topic and event required

Error message

topic and event required

What it means

Thrown by siyuan.event.emit when fewer than 2 arguments are passed. emit(topic, data) publishes to the in-process event bus and requires both a topic and a payload.

Source

Thrown at kernel/plugin/api_event.go:46

func injectEvent(p *KernelPlugin, rt *goja.Runtime, siyuan *goja.Object) (err error) {
	defer func() {
		if r := recover(); r != nil {
			err = fmt.Errorf("injectEvent: %v", r)
		}
	}()

	event := rt.NewObject()

	lo.Must0(event.Set("handler", goja.Null()))

	lo.Must0(event.Set("emit", rt.ToValue(func(call goja.FunctionCall, rt *goja.Runtime) goja.Value {
		promise, resolve, reject := rt.NewPromise()

		var argErr error
		var topic string
		var eventData any
		if len(call.Arguments) < 2 {
			argErr = fmt.Errorf("topic and event required")
		} else {
			topic = call.Argument(0).String()
			if topic == "" {
				argErr = fmt.Errorf("topic required")
			} else {
				eventData = call.Argument(1).Export()
			}
		}

		runErr := p.worker.Run(func(rt *goja.Runtime) (result any, err error) {
			if argErr != nil {
				err = argErr
				return
			}
			p.bus.Publish(topic, eventData)
			return
		}, func(rt *goja.Runtime, result any, err error) {
			if lo.IsNil(err) {

View on GitHub (pinned to 251596fc0d)

Solutions

  1. Pass both arguments: siyuan.event.emit('topic', data).
  2. If you have no payload, pass null explicitly: emit('topic', null).

Example fix

// before
siyuan.event.emit('my-event');
// after
siyuan.event.emit('my-event', { id: 1 });
Defensive patterns

Strategy: validation

Validate before calling

if (arguments.length < 2) throw new Error('topic and data required');
siyuan.event.emit(topic, data);

Prevention

When it happens

Trigger: Calling emit('topic') with no payload, or emit() with no args. len(call.Arguments) < 2 triggers the error at api_event.go:45.

Common situations: Plugin emits a signal forgetting the data argument, or passes undefined explicitly expecting it to be tolerated.

Related errors


AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12). Data as JSON: /api/errors/ae388d4be596cc04. Report an issue: GitHub.