@kubuild/schema 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -0
- package/dist/actions.d.ts +425 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/document.d.ts +200 -8
- package/dist/document.d.ts.map +1 -1
- package/dist/form.d.ts +129 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/index.cjs +918 -94
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +858 -90
- package/dist/index.js.map +1 -1
- package/dist/json-schema.d.ts +690 -0
- package/dist/json-schema.d.ts.map +1 -1
- package/package.json +3 -2
package/README.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# @kubuild/schema
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@kubuild/schema)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
|
|
7
|
+
Zod schemas and inferred TypeScript definitions for the **KUBUILD** portable page document format (`.stora`), Action Pipeline, Form Configuration, and JSON Schema generation utilities.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 📦 Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Using pnpm (recommended)
|
|
15
|
+
pnpm add @kubuild/schema
|
|
16
|
+
|
|
17
|
+
# Using npm
|
|
18
|
+
npm install @kubuild/schema
|
|
19
|
+
|
|
20
|
+
# Using yarn
|
|
21
|
+
yarn add @kubuild/schema
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## ✨ Features
|
|
27
|
+
|
|
28
|
+
- **Runtime Validation with Zod**: Strict validation and sanitization for all page document structures, node trees, styles, and action pipelines.
|
|
29
|
+
- **Portable Document Model**: Type-safe definitions for `PageDocument`, `Node`, `StyleObject`, `Metadata`, and `AnimationConfig`.
|
|
30
|
+
- **Action Pipeline Schema**: Rich action trigger models (`onClick`, `onSubmit`, `onChange`, `onLoad`) and step definitions (`apiRequest`, `showToast`, `openModal`, `closeModal`, `navigate`, `custom`).
|
|
31
|
+
- **Form & Field Binding Schema**: Data structures for form configuration, field validation rules (regex, required, min/max length, email), and variable state binding.
|
|
32
|
+
- **JSON Schema Export**: Utility functions (`generateJsonSchema`) to produce standard JSON Schema definitions for external tooling and validators.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 🚀 Quick Usage
|
|
37
|
+
|
|
38
|
+
### Validating a Page Document
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import { PageDocumentSchema, type PageDocument } from '@kubuild/schema';
|
|
42
|
+
|
|
43
|
+
const untrustedData = {
|
|
44
|
+
schema: 'stora.page',
|
|
45
|
+
version: '1.0.0',
|
|
46
|
+
metadata: {
|
|
47
|
+
title: 'My Landing Page',
|
|
48
|
+
createdAt: new Date().toISOString()
|
|
49
|
+
},
|
|
50
|
+
document: {
|
|
51
|
+
id: 'root-1',
|
|
52
|
+
type: 'container',
|
|
53
|
+
children: [
|
|
54
|
+
{
|
|
55
|
+
id: 'heading-1',
|
|
56
|
+
type: 'heading',
|
|
57
|
+
props: { content: 'Welcome to KUBUILD' },
|
|
58
|
+
styles: { fontSize: '2rem', fontWeight: 'bold' }
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Validates and returns strongly typed PageDocument
|
|
65
|
+
const result = PageDocumentSchema.safeParse(untrustedData);
|
|
66
|
+
|
|
67
|
+
if (result.success) {
|
|
68
|
+
const page: PageDocument = result.data;
|
|
69
|
+
console.log('Document valid:', page.metadata.title);
|
|
70
|
+
} else {
|
|
71
|
+
console.error('Validation errors:', result.error.format());
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Validating Action Pipelines
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { ActionPipelineSchema, type ActionPipeline } from '@kubuild/schema';
|
|
79
|
+
|
|
80
|
+
const pipelineData = {
|
|
81
|
+
id: 'pipeline-submit-form',
|
|
82
|
+
name: 'Submit Lead Form',
|
|
83
|
+
trigger: 'onSubmit',
|
|
84
|
+
steps: [
|
|
85
|
+
{
|
|
86
|
+
id: 'step-api-1',
|
|
87
|
+
type: 'apiRequest',
|
|
88
|
+
name: 'Send to Backend',
|
|
89
|
+
config: {
|
|
90
|
+
url: 'https://api.example.com/leads',
|
|
91
|
+
method: 'POST',
|
|
92
|
+
headers: { 'Content-Type': 'application/json' },
|
|
93
|
+
body: '{{form}}'
|
|
94
|
+
},
|
|
95
|
+
onSuccess: [
|
|
96
|
+
{
|
|
97
|
+
id: 'step-toast-success',
|
|
98
|
+
type: 'showToast',
|
|
99
|
+
name: 'Success Notification',
|
|
100
|
+
config: {
|
|
101
|
+
message: 'Thank you! We will get in touch.',
|
|
102
|
+
type: 'success'
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const pipeline: ActionPipeline = ActionPipelineSchema.parse(pipelineData);
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 📄 License
|
|
116
|
+
|
|
117
|
+
MIT © [KUBUILD](https://github.com/kustora/kubuild)
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Action Trigger Types
|
|
4
|
+
* Events in the DOM or component lifecycle that can trigger an action pipeline.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ActionTriggerTypeSchema: z.ZodEnum<{
|
|
7
|
+
load: "load";
|
|
8
|
+
change: "change";
|
|
9
|
+
blur: "blur";
|
|
10
|
+
click: "click";
|
|
11
|
+
focus: "focus";
|
|
12
|
+
submit: "submit";
|
|
13
|
+
}>;
|
|
14
|
+
export type ActionTriggerType = z.infer<typeof ActionTriggerTypeSchema>;
|
|
15
|
+
export type ActionTrigger = ActionTriggerType;
|
|
16
|
+
export declare const ActionTriggerSchema: z.ZodEnum<{
|
|
17
|
+
load: "load";
|
|
18
|
+
change: "change";
|
|
19
|
+
blur: "blur";
|
|
20
|
+
click: "click";
|
|
21
|
+
focus: "focus";
|
|
22
|
+
submit: "submit";
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Action Step Types
|
|
26
|
+
* Discrete operations executed sequentially or conditionally within an action pipeline.
|
|
27
|
+
*/
|
|
28
|
+
export declare const ActionStepTypeSchema: z.ZodEnum<{
|
|
29
|
+
navigate: "navigate";
|
|
30
|
+
api_request: "api_request";
|
|
31
|
+
set_state: "set_state";
|
|
32
|
+
reset_form: "reset_form";
|
|
33
|
+
show_toast: "show_toast";
|
|
34
|
+
open_modal: "open_modal";
|
|
35
|
+
close_modal: "close_modal";
|
|
36
|
+
copy_clipboard: "copy_clipboard";
|
|
37
|
+
custom_event: "custom_event";
|
|
38
|
+
}>;
|
|
39
|
+
export type ActionStepType = z.infer<typeof ActionStepTypeSchema>;
|
|
40
|
+
/**
|
|
41
|
+
* Condition Operators for branch & conditional step execution.
|
|
42
|
+
*/
|
|
43
|
+
export declare const ConditionOperatorSchema: z.ZodEnum<{
|
|
44
|
+
contains: "contains";
|
|
45
|
+
regex: "regex";
|
|
46
|
+
equals: "equals";
|
|
47
|
+
not_equals: "not_equals";
|
|
48
|
+
not_contains: "not_contains";
|
|
49
|
+
is_truthy: "is_truthy";
|
|
50
|
+
is_falsy: "is_falsy";
|
|
51
|
+
gt: "gt";
|
|
52
|
+
gte: "gte";
|
|
53
|
+
lt: "lt";
|
|
54
|
+
lte: "lte";
|
|
55
|
+
}>;
|
|
56
|
+
export type ConditionOperator = z.infer<typeof ConditionOperatorSchema>;
|
|
57
|
+
/**
|
|
58
|
+
* Action Step Condition Schema
|
|
59
|
+
* Evaluated before running a step. If condition fails, step is skipped.
|
|
60
|
+
*/
|
|
61
|
+
export declare const ActionStepConditionSchema: z.ZodObject<{
|
|
62
|
+
field: z.ZodString;
|
|
63
|
+
operator: z.ZodEnum<{
|
|
64
|
+
contains: "contains";
|
|
65
|
+
regex: "regex";
|
|
66
|
+
equals: "equals";
|
|
67
|
+
not_equals: "not_equals";
|
|
68
|
+
not_contains: "not_contains";
|
|
69
|
+
is_truthy: "is_truthy";
|
|
70
|
+
is_falsy: "is_falsy";
|
|
71
|
+
gt: "gt";
|
|
72
|
+
gte: "gte";
|
|
73
|
+
lt: "lt";
|
|
74
|
+
lte: "lte";
|
|
75
|
+
}>;
|
|
76
|
+
value: z.ZodOptional<z.ZodUnknown>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
export type ActionStepCondition = z.infer<typeof ActionStepConditionSchema>;
|
|
79
|
+
export declare function isSafeActionUrl(url: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* 1. API Request Step Payload Schema
|
|
82
|
+
*/
|
|
83
|
+
export declare const ApiRequestStepPayloadSchema: z.ZodObject<{
|
|
84
|
+
url: z.ZodString;
|
|
85
|
+
method: z.ZodDefault<z.ZodEnum<{
|
|
86
|
+
GET: "GET";
|
|
87
|
+
POST: "POST";
|
|
88
|
+
PUT: "PUT";
|
|
89
|
+
DELETE: "DELETE";
|
|
90
|
+
PATCH: "PATCH";
|
|
91
|
+
HEAD: "HEAD";
|
|
92
|
+
OPTIONS: "OPTIONS";
|
|
93
|
+
}>>;
|
|
94
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
95
|
+
queryParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
|
|
96
|
+
body: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodArray<z.ZodUnknown>]>>;
|
|
97
|
+
bodyFormat: z.ZodOptional<z.ZodEnum<{
|
|
98
|
+
raw: "raw";
|
|
99
|
+
formData: "formData";
|
|
100
|
+
text: "text";
|
|
101
|
+
json: "json";
|
|
102
|
+
"form-data": "form-data";
|
|
103
|
+
urlencoded: "urlencoded";
|
|
104
|
+
"url-encoded": "url-encoded";
|
|
105
|
+
}>>;
|
|
106
|
+
bodyType: z.ZodOptional<z.ZodEnum<{
|
|
107
|
+
raw: "raw";
|
|
108
|
+
formData: "formData";
|
|
109
|
+
text: "text";
|
|
110
|
+
json: "json";
|
|
111
|
+
"form-data": "form-data";
|
|
112
|
+
urlencoded: "urlencoded";
|
|
113
|
+
"url-encoded": "url-encoded";
|
|
114
|
+
}>>;
|
|
115
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
116
|
+
responseMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
117
|
+
}, z.core.$strip>;
|
|
118
|
+
export type ApiRequestStepPayload = z.infer<typeof ApiRequestStepPayloadSchema>;
|
|
119
|
+
/**
|
|
120
|
+
* 2. Navigate Step Payload Schema
|
|
121
|
+
*/
|
|
122
|
+
export declare const NavigateStepPayloadSchema: z.ZodObject<{
|
|
123
|
+
url: z.ZodString;
|
|
124
|
+
target: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
125
|
+
_self: "_self";
|
|
126
|
+
_blank: "_blank";
|
|
127
|
+
_parent: "_parent";
|
|
128
|
+
_top: "_top";
|
|
129
|
+
}>>>;
|
|
130
|
+
replace: z.ZodOptional<z.ZodBoolean>;
|
|
131
|
+
scroll: z.ZodOptional<z.ZodBoolean>;
|
|
132
|
+
behavior: z.ZodOptional<z.ZodEnum<{
|
|
133
|
+
auto: "auto";
|
|
134
|
+
smooth: "smooth";
|
|
135
|
+
}>>;
|
|
136
|
+
}, z.core.$strip>;
|
|
137
|
+
export type NavigateStepPayload = z.infer<typeof NavigateStepPayloadSchema>;
|
|
138
|
+
/**
|
|
139
|
+
* 3. Set State Step Payload Schema
|
|
140
|
+
*/
|
|
141
|
+
export declare const SetStateStepPayloadSchema: z.ZodObject<{
|
|
142
|
+
key: z.ZodString;
|
|
143
|
+
value: z.ZodUnknown;
|
|
144
|
+
scope: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
145
|
+
session: "session";
|
|
146
|
+
document: "document";
|
|
147
|
+
local: "local";
|
|
148
|
+
runtime: "runtime";
|
|
149
|
+
}>>>;
|
|
150
|
+
}, z.core.$strip>;
|
|
151
|
+
export type SetStateStepPayload = z.infer<typeof SetStateStepPayloadSchema>;
|
|
152
|
+
/**
|
|
153
|
+
* 4. Reset Form Step Payload Schema
|
|
154
|
+
*/
|
|
155
|
+
export declare const ResetFormStepPayloadSchema: z.ZodObject<{
|
|
156
|
+
formId: z.ZodOptional<z.ZodString>;
|
|
157
|
+
}, z.core.$strip>;
|
|
158
|
+
export type ResetFormStepPayload = z.infer<typeof ResetFormStepPayloadSchema>;
|
|
159
|
+
/**
|
|
160
|
+
* 5. Show Toast Step Payload Schema
|
|
161
|
+
*/
|
|
162
|
+
export declare const ShowToastStepPayloadSchema: z.ZodObject<{
|
|
163
|
+
message: z.ZodString;
|
|
164
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
165
|
+
error: "error";
|
|
166
|
+
info: "info";
|
|
167
|
+
warning: "warning";
|
|
168
|
+
success: "success";
|
|
169
|
+
}>>>;
|
|
170
|
+
variant: z.ZodOptional<z.ZodEnum<{
|
|
171
|
+
error: "error";
|
|
172
|
+
info: "info";
|
|
173
|
+
warning: "warning";
|
|
174
|
+
success: "success";
|
|
175
|
+
}>>;
|
|
176
|
+
title: z.ZodOptional<z.ZodString>;
|
|
177
|
+
duration: z.ZodOptional<z.ZodNumber>;
|
|
178
|
+
position: z.ZodOptional<z.ZodEnum<{
|
|
179
|
+
"top-right": "top-right";
|
|
180
|
+
"top-left": "top-left";
|
|
181
|
+
"bottom-right": "bottom-right";
|
|
182
|
+
"bottom-left": "bottom-left";
|
|
183
|
+
"top-center": "top-center";
|
|
184
|
+
"bottom-center": "bottom-center";
|
|
185
|
+
}>>;
|
|
186
|
+
}, z.core.$strip>;
|
|
187
|
+
export type ShowToastStepPayload = z.infer<typeof ShowToastStepPayloadSchema>;
|
|
188
|
+
/**
|
|
189
|
+
* 6. Open Modal Step Payload Schema
|
|
190
|
+
*/
|
|
191
|
+
export declare const OpenModalStepPayloadSchema: z.ZodObject<{
|
|
192
|
+
modalId: z.ZodOptional<z.ZodString>;
|
|
193
|
+
modalNodeId: z.ZodOptional<z.ZodString>;
|
|
194
|
+
toggle: z.ZodOptional<z.ZodBoolean>;
|
|
195
|
+
}, z.core.$strip>;
|
|
196
|
+
export type OpenModalStepPayload = z.infer<typeof OpenModalStepPayloadSchema>;
|
|
197
|
+
/**
|
|
198
|
+
* 7. Close Modal Step Payload Schema
|
|
199
|
+
*/
|
|
200
|
+
export declare const CloseModalStepPayloadSchema: z.ZodObject<{
|
|
201
|
+
modalId: z.ZodOptional<z.ZodString>;
|
|
202
|
+
modalNodeId: z.ZodOptional<z.ZodString>;
|
|
203
|
+
}, z.core.$strip>;
|
|
204
|
+
export type CloseModalStepPayload = z.infer<typeof CloseModalStepPayloadSchema>;
|
|
205
|
+
/**
|
|
206
|
+
* 8. Copy Clipboard Step Payload Schema
|
|
207
|
+
*/
|
|
208
|
+
export declare const CopyClipboardStepPayloadSchema: z.ZodObject<{
|
|
209
|
+
text: z.ZodOptional<z.ZodString>;
|
|
210
|
+
value: z.ZodOptional<z.ZodUnknown>;
|
|
211
|
+
notify: z.ZodOptional<z.ZodBoolean>;
|
|
212
|
+
toastMessage: z.ZodOptional<z.ZodString>;
|
|
213
|
+
}, z.core.$strip>;
|
|
214
|
+
export type CopyClipboardStepPayload = z.infer<typeof CopyClipboardStepPayloadSchema>;
|
|
215
|
+
/**
|
|
216
|
+
* 9. Custom Event Step Payload Schema
|
|
217
|
+
*/
|
|
218
|
+
export declare const CustomEventStepPayloadSchema: z.ZodObject<{
|
|
219
|
+
eventName: z.ZodString;
|
|
220
|
+
detail: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
221
|
+
bubbles: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
222
|
+
cancelable: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
223
|
+
}, z.core.$strip>;
|
|
224
|
+
export type CustomEventStepPayload = z.infer<typeof CustomEventStepPayloadSchema>;
|
|
225
|
+
/**
|
|
226
|
+
* Dictionary of Step Payload Schemas by Step Type
|
|
227
|
+
*/
|
|
228
|
+
export declare const StepPayloadSchemas: {
|
|
229
|
+
readonly api_request: z.ZodObject<{
|
|
230
|
+
url: z.ZodString;
|
|
231
|
+
method: z.ZodDefault<z.ZodEnum<{
|
|
232
|
+
GET: "GET";
|
|
233
|
+
POST: "POST";
|
|
234
|
+
PUT: "PUT";
|
|
235
|
+
DELETE: "DELETE";
|
|
236
|
+
PATCH: "PATCH";
|
|
237
|
+
HEAD: "HEAD";
|
|
238
|
+
OPTIONS: "OPTIONS";
|
|
239
|
+
}>>;
|
|
240
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
241
|
+
queryParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
|
|
242
|
+
body: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodArray<z.ZodUnknown>]>>;
|
|
243
|
+
bodyFormat: z.ZodOptional<z.ZodEnum<{
|
|
244
|
+
raw: "raw";
|
|
245
|
+
formData: "formData";
|
|
246
|
+
text: "text";
|
|
247
|
+
json: "json";
|
|
248
|
+
"form-data": "form-data";
|
|
249
|
+
urlencoded: "urlencoded";
|
|
250
|
+
"url-encoded": "url-encoded";
|
|
251
|
+
}>>;
|
|
252
|
+
bodyType: z.ZodOptional<z.ZodEnum<{
|
|
253
|
+
raw: "raw";
|
|
254
|
+
formData: "formData";
|
|
255
|
+
text: "text";
|
|
256
|
+
json: "json";
|
|
257
|
+
"form-data": "form-data";
|
|
258
|
+
urlencoded: "urlencoded";
|
|
259
|
+
"url-encoded": "url-encoded";
|
|
260
|
+
}>>;
|
|
261
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
262
|
+
responseMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
263
|
+
}, z.core.$strip>;
|
|
264
|
+
readonly navigate: z.ZodObject<{
|
|
265
|
+
url: z.ZodString;
|
|
266
|
+
target: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
267
|
+
_self: "_self";
|
|
268
|
+
_blank: "_blank";
|
|
269
|
+
_parent: "_parent";
|
|
270
|
+
_top: "_top";
|
|
271
|
+
}>>>;
|
|
272
|
+
replace: z.ZodOptional<z.ZodBoolean>;
|
|
273
|
+
scroll: z.ZodOptional<z.ZodBoolean>;
|
|
274
|
+
behavior: z.ZodOptional<z.ZodEnum<{
|
|
275
|
+
auto: "auto";
|
|
276
|
+
smooth: "smooth";
|
|
277
|
+
}>>;
|
|
278
|
+
}, z.core.$strip>;
|
|
279
|
+
readonly set_state: z.ZodObject<{
|
|
280
|
+
key: z.ZodString;
|
|
281
|
+
value: z.ZodUnknown;
|
|
282
|
+
scope: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
283
|
+
session: "session";
|
|
284
|
+
document: "document";
|
|
285
|
+
local: "local";
|
|
286
|
+
runtime: "runtime";
|
|
287
|
+
}>>>;
|
|
288
|
+
}, z.core.$strip>;
|
|
289
|
+
readonly reset_form: z.ZodObject<{
|
|
290
|
+
formId: z.ZodOptional<z.ZodString>;
|
|
291
|
+
}, z.core.$strip>;
|
|
292
|
+
readonly show_toast: z.ZodObject<{
|
|
293
|
+
message: z.ZodString;
|
|
294
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
295
|
+
error: "error";
|
|
296
|
+
info: "info";
|
|
297
|
+
warning: "warning";
|
|
298
|
+
success: "success";
|
|
299
|
+
}>>>;
|
|
300
|
+
variant: z.ZodOptional<z.ZodEnum<{
|
|
301
|
+
error: "error";
|
|
302
|
+
info: "info";
|
|
303
|
+
warning: "warning";
|
|
304
|
+
success: "success";
|
|
305
|
+
}>>;
|
|
306
|
+
title: z.ZodOptional<z.ZodString>;
|
|
307
|
+
duration: z.ZodOptional<z.ZodNumber>;
|
|
308
|
+
position: z.ZodOptional<z.ZodEnum<{
|
|
309
|
+
"top-right": "top-right";
|
|
310
|
+
"top-left": "top-left";
|
|
311
|
+
"bottom-right": "bottom-right";
|
|
312
|
+
"bottom-left": "bottom-left";
|
|
313
|
+
"top-center": "top-center";
|
|
314
|
+
"bottom-center": "bottom-center";
|
|
315
|
+
}>>;
|
|
316
|
+
}, z.core.$strip>;
|
|
317
|
+
readonly open_modal: z.ZodObject<{
|
|
318
|
+
modalId: z.ZodOptional<z.ZodString>;
|
|
319
|
+
modalNodeId: z.ZodOptional<z.ZodString>;
|
|
320
|
+
toggle: z.ZodOptional<z.ZodBoolean>;
|
|
321
|
+
}, z.core.$strip>;
|
|
322
|
+
readonly close_modal: z.ZodObject<{
|
|
323
|
+
modalId: z.ZodOptional<z.ZodString>;
|
|
324
|
+
modalNodeId: z.ZodOptional<z.ZodString>;
|
|
325
|
+
}, z.core.$strip>;
|
|
326
|
+
readonly copy_clipboard: z.ZodObject<{
|
|
327
|
+
text: z.ZodOptional<z.ZodString>;
|
|
328
|
+
value: z.ZodOptional<z.ZodUnknown>;
|
|
329
|
+
notify: z.ZodOptional<z.ZodBoolean>;
|
|
330
|
+
toastMessage: z.ZodOptional<z.ZodString>;
|
|
331
|
+
}, z.core.$strip>;
|
|
332
|
+
readonly custom_event: z.ZodObject<{
|
|
333
|
+
eventName: z.ZodString;
|
|
334
|
+
detail: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
335
|
+
bubbles: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
336
|
+
cancelable: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
337
|
+
}, z.core.$strip>;
|
|
338
|
+
};
|
|
339
|
+
/**
|
|
340
|
+
* Action Step Interface
|
|
341
|
+
* Recursive definition allowing branching (onSuccess, onError).
|
|
342
|
+
*/
|
|
343
|
+
export interface ActionStep {
|
|
344
|
+
id: string;
|
|
345
|
+
type: ActionStepType;
|
|
346
|
+
label?: string;
|
|
347
|
+
payload?: Record<string, unknown>;
|
|
348
|
+
condition?: ActionStepCondition;
|
|
349
|
+
timeout?: number;
|
|
350
|
+
continueOnError?: boolean;
|
|
351
|
+
onSuccess?: ActionStep[];
|
|
352
|
+
onError?: ActionStep[];
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Action Step Schema
|
|
356
|
+
* Validates individual steps in an action pipeline, supporting recursive branching.
|
|
357
|
+
*/
|
|
358
|
+
export declare const ActionStepSchema: z.ZodType<ActionStep>;
|
|
359
|
+
/**
|
|
360
|
+
* Action Pipeline Schema
|
|
361
|
+
* Defines an event trigger and an ordered sequence of action steps to execute.
|
|
362
|
+
*/
|
|
363
|
+
export declare const ActionPipelineSchema: z.ZodObject<{
|
|
364
|
+
id: z.ZodString;
|
|
365
|
+
trigger: z.ZodEnum<{
|
|
366
|
+
load: "load";
|
|
367
|
+
change: "change";
|
|
368
|
+
blur: "blur";
|
|
369
|
+
click: "click";
|
|
370
|
+
focus: "focus";
|
|
371
|
+
submit: "submit";
|
|
372
|
+
}>;
|
|
373
|
+
label: z.ZodOptional<z.ZodString>;
|
|
374
|
+
debounceMs: z.ZodOptional<z.ZodNumber>;
|
|
375
|
+
preventDuplicate: z.ZodOptional<z.ZodBoolean>;
|
|
376
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
377
|
+
steps: z.ZodArray<z.ZodType<ActionStep, unknown, z.core.$ZodTypeInternals<ActionStep, unknown>>>;
|
|
378
|
+
}, z.core.$strip>;
|
|
379
|
+
export type ActionPipeline = z.infer<typeof ActionPipelineSchema>;
|
|
380
|
+
/**
|
|
381
|
+
* Type Guards
|
|
382
|
+
*/
|
|
383
|
+
export declare function isActionTriggerType(value: unknown): value is ActionTriggerType;
|
|
384
|
+
export declare function isActionStepType(value: unknown): value is ActionStepType;
|
|
385
|
+
export declare function isConditionOperator(value: unknown): value is ConditionOperator;
|
|
386
|
+
export declare function isActionStepCondition(value: unknown): value is ActionStepCondition;
|
|
387
|
+
export declare function isActionStep(value: unknown): value is ActionStep;
|
|
388
|
+
export declare function isActionPipeline(value: unknown): value is ActionPipeline;
|
|
389
|
+
/**
|
|
390
|
+
* Validates a step's payload specifically according to its step type.
|
|
391
|
+
*/
|
|
392
|
+
export declare function validateActionStepPayload(type: ActionStepType, payload: unknown): {
|
|
393
|
+
success: boolean;
|
|
394
|
+
data?: unknown;
|
|
395
|
+
error?: z.ZodError;
|
|
396
|
+
};
|
|
397
|
+
/**
|
|
398
|
+
* Sanitization Utilities
|
|
399
|
+
*/
|
|
400
|
+
/**
|
|
401
|
+
* Sanitizes a URL string by checking if it contains dangerous protocols or scripts.
|
|
402
|
+
* Returns the trimmed URL if safe, or a fallback string (default empty string `""`).
|
|
403
|
+
*/
|
|
404
|
+
export declare function sanitizeActionUrl(url: unknown, fallback?: string): string;
|
|
405
|
+
/**
|
|
406
|
+
* Sanitizes a general string value against script tags and dangerous HTML/protocols.
|
|
407
|
+
*/
|
|
408
|
+
export declare function sanitizeActionString(value: unknown, fallback?: string): string;
|
|
409
|
+
/**
|
|
410
|
+
* Recursively sanitizes any arbitrary value (string, object, array, primitive) in an action payload.
|
|
411
|
+
*/
|
|
412
|
+
export declare function sanitizeActionValue(value: unknown): unknown;
|
|
413
|
+
/**
|
|
414
|
+
* Sanitizes an action step payload object, cleaning dangerous URLs and injection strings recursively.
|
|
415
|
+
*/
|
|
416
|
+
export declare function sanitizeActionPayload(payload: Record<string, unknown> | undefined): Record<string, unknown>;
|
|
417
|
+
/**
|
|
418
|
+
* Recursively sanitizes an ActionStep, including its payload, condition, onSuccess, and onError branches.
|
|
419
|
+
*/
|
|
420
|
+
export declare function sanitizeActionStep(step: ActionStep): ActionStep;
|
|
421
|
+
/**
|
|
422
|
+
* Recursively sanitizes an ActionPipeline and all its nested steps.
|
|
423
|
+
*/
|
|
424
|
+
export declare function sanitizeActionPipeline(pipeline: ActionPipeline): ActionPipeline;
|
|
425
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|