Skip to content

Commit 4a9e6de

Browse files
committed
Add HookContext schema and extend hook events
Introduces the HookContext schema and documentation for richer hook execution context. Expands supported hook events to include bulk operations (beforeUpdateMany, afterUpdateMany, beforeDeleteMany, afterDeleteMany) in both documentation and JSON schemas. Also updates the handler property to accept direct functions in addition to string names.
1 parent 31bc494 commit 4a9e6de

File tree

6 files changed

+130
-12
lines changed

6 files changed

+130
-12
lines changed

content/docs/references/data/hook/Hook.mdx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ description: Hook Schema Reference
1010
| **name** | `string` || Hook unique name (snake_case) |
1111
| **label** | `string` | optional | Description of what this hook does |
1212
| **object** | `string \| string[]` || Target object(s) |
13-
| **events** | `Enum<'beforeFind' \| 'afterFind' \| 'beforeFindOne' \| 'afterFindOne' \| 'beforeCount' \| 'afterCount' \| 'beforeAggregate' \| 'afterAggregate' \| 'beforeInsert' \| 'afterInsert' \| 'beforeUpdate' \| 'afterUpdate' \| 'beforeDelete' \| 'afterDelete'>[]` || Lifecycle events |
14-
| **handler** | `string` | optional | Function handler name (e.g. "my_plugin.validate_account") |
15-
| **script** | `string` | optional | Inline script body |
13+
| **events** | `Enum<'beforeFind' \| 'afterFind' \| 'beforeFindOne' \| 'afterFindOne' \| 'beforeCount' \| 'afterCount' \| 'beforeAggregate' \| 'afterAggregate' \| 'beforeInsert' \| 'afterInsert' \| 'beforeUpdate' \| 'afterUpdate' \| 'beforeDelete' \| 'afterDelete' \| 'beforeUpdateMany' \| 'afterUpdateMany' \| 'beforeDeleteMany' \| 'afterDeleteMany'>[]` || Lifecycle events |
14+
| **handler** | `string \| any` | optional | Function handler name or direct function |
1615
| **priority** | `number` | optional | Execution priority |
1716
| **async** | `boolean` | optional | Run specifically as fire-and-forget |
1817
| **onError** | `Enum<'abort' \| 'log'>` | optional | Error handling strategy |
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
title: HookContext
3+
description: HookContext Schema Reference
4+
---
5+
6+
## Properties
7+
8+
| Property | Type | Required | Description |
9+
| :--- | :--- | :--- | :--- |
10+
| **id** | `string` | optional | Unique execution ID for tracing |
11+
| **object** | `string` || |
12+
| **event** | `Enum<'beforeFind' \| 'afterFind' \| 'beforeFindOne' \| 'afterFindOne' \| 'beforeCount' \| 'afterCount' \| 'beforeAggregate' \| 'afterAggregate' \| 'beforeInsert' \| 'afterInsert' \| 'beforeUpdate' \| 'afterUpdate' \| 'beforeDelete' \| 'afterDelete' \| 'beforeUpdateMany' \| 'afterUpdateMany' \| 'beforeDeleteMany' \| 'afterDeleteMany'>` || |
13+
| **input** | `Record<string, any>` || Mutable input parameters |
14+
| **result** | `any` | optional | Operation result (After hooks only) |
15+
| **previous** | `Record<string, any>` | optional | Record state before operation |
16+
| **session** | `object` | optional | Current session context |
17+
| **transaction** | `any` | optional | Database transaction handle |
18+
| **ql** | `any` | optional | ObjectQL Engine Reference |

content/docs/references/data/hook/HookEvent.mdx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@ description: HookEvent Schema Reference
1818
* `beforeUpdate`
1919
* `afterUpdate`
2020
* `beforeDelete`
21-
* `afterDelete`
21+
* `afterDelete`
22+
* `beforeUpdateMany`
23+
* `afterUpdateMany`
24+
* `beforeDeleteMany`
25+
* `afterDeleteMany`

packages/spec/json-schema/data/Hook.json

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,23 @@
4545
"beforeUpdate",
4646
"afterUpdate",
4747
"beforeDelete",
48-
"afterDelete"
48+
"afterDelete",
49+
"beforeUpdateMany",
50+
"afterUpdateMany",
51+
"beforeDeleteMany",
52+
"afterDeleteMany"
4953
]
5054
},
5155
"description": "Lifecycle events"
5256
},
5357
"handler": {
54-
"type": "string",
55-
"description": "Function handler name (e.g. \"my_plugin.validate_account\")"
56-
},
57-
"script": {
58-
"type": "string",
59-
"description": "Inline script body"
58+
"anyOf": [
59+
{
60+
"type": "string"
61+
},
62+
{}
63+
],
64+
"description": "Function handler name or direct function"
6065
},
6166
"priority": {
6267
"type": "number",
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
{
2+
"$ref": "#/definitions/HookContext",
3+
"definitions": {
4+
"HookContext": {
5+
"type": "object",
6+
"properties": {
7+
"id": {
8+
"type": "string",
9+
"description": "Unique execution ID for tracing"
10+
},
11+
"object": {
12+
"type": "string"
13+
},
14+
"event": {
15+
"type": "string",
16+
"enum": [
17+
"beforeFind",
18+
"afterFind",
19+
"beforeFindOne",
20+
"afterFindOne",
21+
"beforeCount",
22+
"afterCount",
23+
"beforeAggregate",
24+
"afterAggregate",
25+
"beforeInsert",
26+
"afterInsert",
27+
"beforeUpdate",
28+
"afterUpdate",
29+
"beforeDelete",
30+
"afterDelete",
31+
"beforeUpdateMany",
32+
"afterUpdateMany",
33+
"beforeDeleteMany",
34+
"afterDeleteMany"
35+
]
36+
},
37+
"input": {
38+
"type": "object",
39+
"additionalProperties": {},
40+
"description": "Mutable input parameters"
41+
},
42+
"result": {
43+
"description": "Operation result (After hooks only)"
44+
},
45+
"previous": {
46+
"type": "object",
47+
"additionalProperties": {},
48+
"description": "Record state before operation"
49+
},
50+
"session": {
51+
"type": "object",
52+
"properties": {
53+
"userId": {
54+
"type": "string"
55+
},
56+
"tenantId": {
57+
"type": "string"
58+
},
59+
"roles": {
60+
"type": "array",
61+
"items": {
62+
"type": "string"
63+
}
64+
},
65+
"accessToken": {
66+
"type": "string"
67+
}
68+
},
69+
"additionalProperties": false,
70+
"description": "Current session context"
71+
},
72+
"transaction": {
73+
"description": "Database transaction handle"
74+
},
75+
"ql": {
76+
"description": "ObjectQL Engine Reference"
77+
}
78+
},
79+
"required": [
80+
"object",
81+
"event",
82+
"input"
83+
],
84+
"additionalProperties": false
85+
}
86+
},
87+
"$schema": "http://json-schema.org/draft-07/schema#"
88+
}

packages/spec/json-schema/data/HookEvent.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717
"beforeUpdate",
1818
"afterUpdate",
1919
"beforeDelete",
20-
"afterDelete"
20+
"afterDelete",
21+
"beforeUpdateMany",
22+
"afterUpdateMany",
23+
"beforeDeleteMany",
24+
"afterDeleteMany"
2125
]
2226
}
2327
},

0 commit comments

Comments
 (0)