@kubuild/schema 0.5.0 → 0.6.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/dist/actions.d.ts +24 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/document.d.ts +442 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/index.cjs +373 -199
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +361 -199
- package/dist/index.js.map +1 -1
- package/dist/template.d.ts +98 -0
- package/dist/template.d.ts.map +1 -1
- package/dist/tracking.d.ts +201 -0
- package/dist/tracking.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -40,15 +40,19 @@ __export(index_exports, {
|
|
|
40
40
|
ConditionOperatorSchema: () => ConditionOperatorSchema,
|
|
41
41
|
CopyClipboardStepPayloadSchema: () => CopyClipboardStepPayloadSchema,
|
|
42
42
|
CustomEventStepPayloadSchema: () => CustomEventStepPayloadSchema,
|
|
43
|
+
CustomTrackingProviderConfigSchema: () => CustomTrackingProviderConfigSchema,
|
|
43
44
|
DEFAULT_ANIMATION_CONFIG: () => DEFAULT_ANIMATION_CONFIG,
|
|
44
45
|
DocumentMetadataSchema: () => DocumentMetadataSchema,
|
|
45
46
|
FORM_CONFIG_JSON_SCHEMA_V1: () => FORM_CONFIG_JSON_SCHEMA_V1,
|
|
46
47
|
FORM_FIELD_BINDING_JSON_SCHEMA_V1: () => FORM_FIELD_BINDING_JSON_SCHEMA_V1,
|
|
47
48
|
FormConfigSchema: () => FormConfigSchema,
|
|
48
49
|
FormFieldBindingSchema: () => FormFieldBindingSchema,
|
|
50
|
+
GoogleTrackingProviderConfigSchema: () => GoogleTrackingProviderConfigSchema,
|
|
51
|
+
GtmTrackingProviderConfigSchema: () => GtmTrackingProviderConfigSchema,
|
|
49
52
|
MANIFEST_JSON_SCHEMA_V1: () => MANIFEST_JSON_SCHEMA_V1,
|
|
50
53
|
ManifestAssetItemSchema: () => ManifestAssetItemSchema,
|
|
51
54
|
ManifestSchema: () => ManifestSchema,
|
|
55
|
+
MetaTrackingProviderConfigSchema: () => MetaTrackingProviderConfigSchema,
|
|
52
56
|
NavigateStepPayloadSchema: () => NavigateStepPayloadSchema,
|
|
53
57
|
NodeSchema: () => NodeSchema,
|
|
54
58
|
OpenModalStepPayloadSchema: () => OpenModalStepPayloadSchema,
|
|
@@ -66,6 +70,7 @@ __export(index_exports, {
|
|
|
66
70
|
SafeThumbnailUrlSchema: () => SafeThumbnailUrlSchema,
|
|
67
71
|
SetStateStepPayloadSchema: () => SetStateStepPayloadSchema,
|
|
68
72
|
ShowToastStepPayloadSchema: () => ShowToastStepPayloadSchema,
|
|
73
|
+
StandardTrackingEventSchema: () => StandardTrackingEventSchema,
|
|
69
74
|
StepPayloadSchemas: () => StepPayloadSchemas,
|
|
70
75
|
StyleDefinitionSchema: () => StyleDefinitionSchema,
|
|
71
76
|
StyleValueSchema: () => StyleValueSchema,
|
|
@@ -73,6 +78,11 @@ __export(index_exports, {
|
|
|
73
78
|
TemplatePackageRefSchema: () => TemplatePackageRefSchema,
|
|
74
79
|
TemplateRecordSchema: () => TemplateRecordSchema,
|
|
75
80
|
TemplateRequirementsSchema: () => TemplateRequirementsSchema,
|
|
81
|
+
TikTokTrackingProviderConfigSchema: () => TikTokTrackingProviderConfigSchema,
|
|
82
|
+
TrackEventStepPayloadSchema: () => TrackEventStepPayloadSchema,
|
|
83
|
+
TrackingConfigSchema: () => TrackingConfigSchema,
|
|
84
|
+
TrackingDeliverySchema: () => TrackingDeliverySchema,
|
|
85
|
+
TrackingProviderTypeSchema: () => TrackingProviderTypeSchema,
|
|
76
86
|
ValidateOnEventSchema: () => ValidateOnEventSchema,
|
|
77
87
|
ValidationRuleSchema: () => ValidationRuleSchema,
|
|
78
88
|
ValidationRuleTypeSchema: () => ValidationRuleTypeSchema,
|
|
@@ -103,6 +113,8 @@ __export(index_exports, {
|
|
|
103
113
|
isSafeThumbnail: () => isSafeThumbnail,
|
|
104
114
|
isSafeThumbnailUrl: () => isSafeThumbnailUrl,
|
|
105
115
|
isTemplateRecord: () => isTemplateRecord,
|
|
116
|
+
isTrackEventStepPayload: () => isTrackEventStepPayload,
|
|
117
|
+
isTrackingConfig: () => isTrackingConfig,
|
|
106
118
|
isValidateOnEvent: () => isValidateOnEvent,
|
|
107
119
|
isValidationRule: () => isValidationRule,
|
|
108
120
|
isValidationRuleType: () => isValidationRuleType,
|
|
@@ -121,11 +133,156 @@ __export(index_exports, {
|
|
|
121
133
|
module.exports = __toCommonJS(index_exports);
|
|
122
134
|
|
|
123
135
|
// src/document.ts
|
|
124
|
-
var
|
|
136
|
+
var import_zod4 = require("zod");
|
|
125
137
|
|
|
126
138
|
// src/actions.ts
|
|
139
|
+
var import_zod2 = require("zod");
|
|
140
|
+
|
|
141
|
+
// src/tracking.ts
|
|
127
142
|
var import_zod = require("zod");
|
|
128
|
-
var
|
|
143
|
+
var TrackingProviderTypeSchema = import_zod.z.enum([
|
|
144
|
+
"meta",
|
|
145
|
+
"google",
|
|
146
|
+
"gtm",
|
|
147
|
+
"tiktok",
|
|
148
|
+
"custom"
|
|
149
|
+
]);
|
|
150
|
+
var TrackingDeliverySchema = import_zod.z.enum(["both", "client_only", "server_only"]);
|
|
151
|
+
var MetaTrackingProviderConfigSchema = import_zod.z.object({
|
|
152
|
+
enabled: import_zod.z.boolean().default(true),
|
|
153
|
+
/** Optional linked account/workspace credential ID */
|
|
154
|
+
credentialId: import_zod.z.string().optional(),
|
|
155
|
+
/** Meta Pixel ID (e.g. 123456789012345) */
|
|
156
|
+
pixelId: import_zod.z.string().optional().default(""),
|
|
157
|
+
/** Enable Server-Side Conversions API */
|
|
158
|
+
capiEnabled: import_zod.z.boolean().optional().default(false),
|
|
159
|
+
/**
|
|
160
|
+
* System User Access Token for Meta Graph API.
|
|
161
|
+
* Note: For security in production, prefer configuring tokens on your server backend
|
|
162
|
+
* or proxying via `serverRelayUrl`.
|
|
163
|
+
*/
|
|
164
|
+
capiAccessToken: import_zod.z.string().optional().default(""),
|
|
165
|
+
/** Test Event Code from Meta Events Manager (e.g. "TEST12345") */
|
|
166
|
+
testEventCode: import_zod.z.string().optional().default(""),
|
|
167
|
+
/**
|
|
168
|
+
* Host Server Relay URL (e.g. "/api/tracking/meta").
|
|
169
|
+
* Recommended for browser clients to post CAPI events safely without exposing the secret token.
|
|
170
|
+
*/
|
|
171
|
+
serverRelayUrl: import_zod.z.string().optional().default("")
|
|
172
|
+
});
|
|
173
|
+
var GoogleTrackingProviderConfigSchema = import_zod.z.object({
|
|
174
|
+
enabled: import_zod.z.boolean().default(true),
|
|
175
|
+
/** Optional linked account/workspace credential ID */
|
|
176
|
+
credentialId: import_zod.z.string().optional(),
|
|
177
|
+
/** GA4 Measurement ID (e.g. "G-XXXXXXXXXX") */
|
|
178
|
+
measurementId: import_zod.z.string().optional().default(""),
|
|
179
|
+
/** GA4 Measurement Protocol API Secret (for server-side events) */
|
|
180
|
+
measurementProtocolSecret: import_zod.z.string().optional().default(""),
|
|
181
|
+
/** Host Server Relay URL (e.g. "/api/tracking/ga4") */
|
|
182
|
+
serverRelayUrl: import_zod.z.string().optional().default("")
|
|
183
|
+
});
|
|
184
|
+
var GtmTrackingProviderConfigSchema = import_zod.z.object({
|
|
185
|
+
enabled: import_zod.z.boolean().default(true),
|
|
186
|
+
/** Optional linked account/workspace credential ID */
|
|
187
|
+
credentialId: import_zod.z.string().optional(),
|
|
188
|
+
/** GTM Container ID (e.g. "GTM-XXXXXXX") */
|
|
189
|
+
containerId: import_zod.z.string().optional().default(""),
|
|
190
|
+
/** Host Server Relay URL */
|
|
191
|
+
serverRelayUrl: import_zod.z.string().optional().default("")
|
|
192
|
+
});
|
|
193
|
+
var TikTokTrackingProviderConfigSchema = import_zod.z.object({
|
|
194
|
+
enabled: import_zod.z.boolean().default(true),
|
|
195
|
+
/** Optional linked account/workspace credential ID */
|
|
196
|
+
credentialId: import_zod.z.string().optional(),
|
|
197
|
+
/** TikTok Pixel ID (e.g. "C1234567890") */
|
|
198
|
+
pixelId: import_zod.z.string().optional().default(""),
|
|
199
|
+
/** Enable TikTok Events API (server-side) */
|
|
200
|
+
eventsApiEnabled: import_zod.z.boolean().optional().default(false),
|
|
201
|
+
/** Long-term Access Token for TikTok Events API */
|
|
202
|
+
accessToken: import_zod.z.string().optional().default(""),
|
|
203
|
+
/** Test Event Code from TikTok Event Manager */
|
|
204
|
+
testEventCode: import_zod.z.string().optional().default(""),
|
|
205
|
+
/** Host Server Relay URL (e.g. "/api/tracking/tiktok") */
|
|
206
|
+
serverRelayUrl: import_zod.z.string().optional().default("")
|
|
207
|
+
});
|
|
208
|
+
var CustomTrackingProviderConfigSchema = import_zod.z.object({
|
|
209
|
+
enabled: import_zod.z.boolean().default(true),
|
|
210
|
+
/** Optional linked account/workspace credential ID */
|
|
211
|
+
credentialId: import_zod.z.string().optional(),
|
|
212
|
+
/** Custom Webhook endpoint URL */
|
|
213
|
+
endpointUrl: import_zod.z.string().optional().default(""),
|
|
214
|
+
/** Optional headers sent with the webhook POST request */
|
|
215
|
+
headers: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).optional().default({})
|
|
216
|
+
});
|
|
217
|
+
var TrackingConfigSchema = import_zod.z.object({
|
|
218
|
+
/** Master toggle: dynamically enables or disables all tracking operations */
|
|
219
|
+
enabled: import_zod.z.boolean().default(true),
|
|
220
|
+
/** When enabled, events are logged to console and can bypass live API calls for safe debugging */
|
|
221
|
+
debugMode: import_zod.z.boolean().optional().default(false),
|
|
222
|
+
/** Automatically trigger PageView event upon page load */
|
|
223
|
+
autoPageView: import_zod.z.boolean().optional().default(true),
|
|
224
|
+
/** Default delivery method when not explicitly overridden in an action step */
|
|
225
|
+
defaultDelivery: TrackingDeliverySchema.optional().default("both"),
|
|
226
|
+
/** Provider-specific settings */
|
|
227
|
+
providers: import_zod.z.object({
|
|
228
|
+
meta: MetaTrackingProviderConfigSchema.optional(),
|
|
229
|
+
google: GoogleTrackingProviderConfigSchema.optional(),
|
|
230
|
+
gtm: GtmTrackingProviderConfigSchema.optional(),
|
|
231
|
+
tiktok: TikTokTrackingProviderConfigSchema.optional(),
|
|
232
|
+
custom: CustomTrackingProviderConfigSchema.optional()
|
|
233
|
+
}).optional().default({})
|
|
234
|
+
});
|
|
235
|
+
var StandardTrackingEventSchema = import_zod.z.enum([
|
|
236
|
+
"PageView",
|
|
237
|
+
"ViewContent",
|
|
238
|
+
"AddToCart",
|
|
239
|
+
"InitiateCheckout",
|
|
240
|
+
"Purchase",
|
|
241
|
+
"Lead",
|
|
242
|
+
"Contact",
|
|
243
|
+
"CompleteRegistration",
|
|
244
|
+
"Subscribe",
|
|
245
|
+
"Search",
|
|
246
|
+
"SubmitApplication",
|
|
247
|
+
"Schedule"
|
|
248
|
+
]);
|
|
249
|
+
var TrackEventStepPayloadSchema = import_zod.z.object({
|
|
250
|
+
/** Event name: e.g. "Purchase", "Lead", or custom string */
|
|
251
|
+
eventName: import_zod.z.string().min(1, "Event name cannot be empty"),
|
|
252
|
+
/** Standard event vs custom event identifier */
|
|
253
|
+
eventType: import_zod.z.enum(["standard", "custom"]).optional().default("standard"),
|
|
254
|
+
/** Target provider: 'all' or a specific provider */
|
|
255
|
+
provider: import_zod.z.enum(["all", "meta", "google", "tiktok", "custom"]).optional().default("all"),
|
|
256
|
+
/** Delivery channel: 'both', 'client_only', or 'server_only' */
|
|
257
|
+
delivery: TrackingDeliverySchema.optional().default("both"),
|
|
258
|
+
/**
|
|
259
|
+
* Deduplication Event ID.
|
|
260
|
+
* If omitted, a unique ID is automatically generated so Meta/TikTok CAPI
|
|
261
|
+
* deduplicates cleanly with the browser pixel.
|
|
262
|
+
*/
|
|
263
|
+
eventId: import_zod.z.string().optional(),
|
|
264
|
+
/**
|
|
265
|
+
* Event parameters/properties (e.g. currency, value, content_name, order_id).
|
|
266
|
+
* Supports runtime variable interpolation (e.g. {{ form.price }} or {{ variables.currency }}).
|
|
267
|
+
*/
|
|
268
|
+
params: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional().default({}),
|
|
269
|
+
/**
|
|
270
|
+
* User Data for advanced matching and server CAPI (e.g. email, phone, firstName, lastName).
|
|
271
|
+
* Supports runtime variable interpolation (e.g. {{ form.email }}).
|
|
272
|
+
*/
|
|
273
|
+
userData: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional().default({}),
|
|
274
|
+
/** Step-level active toggle */
|
|
275
|
+
enabled: import_zod.z.boolean().optional().default(true)
|
|
276
|
+
});
|
|
277
|
+
function isTrackingConfig(value) {
|
|
278
|
+
return TrackingConfigSchema.safeParse(value).success;
|
|
279
|
+
}
|
|
280
|
+
function isTrackEventStepPayload(value) {
|
|
281
|
+
return TrackEventStepPayloadSchema.safeParse(value).success;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// src/actions.ts
|
|
285
|
+
var ActionTriggerTypeSchema = import_zod2.z.enum([
|
|
129
286
|
"click",
|
|
130
287
|
"submit",
|
|
131
288
|
"change",
|
|
@@ -134,7 +291,7 @@ var ActionTriggerTypeSchema = import_zod.z.enum([
|
|
|
134
291
|
"load"
|
|
135
292
|
]);
|
|
136
293
|
var ActionTriggerSchema = ActionTriggerTypeSchema;
|
|
137
|
-
var ActionStepTypeSchema =
|
|
294
|
+
var ActionStepTypeSchema = import_zod2.z.enum([
|
|
138
295
|
"api_request",
|
|
139
296
|
"navigate",
|
|
140
297
|
"set_state",
|
|
@@ -143,9 +300,10 @@ var ActionStepTypeSchema = import_zod.z.enum([
|
|
|
143
300
|
"open_modal",
|
|
144
301
|
"close_modal",
|
|
145
302
|
"copy_clipboard",
|
|
146
|
-
"custom_event"
|
|
303
|
+
"custom_event",
|
|
304
|
+
"track_event"
|
|
147
305
|
]);
|
|
148
|
-
var ConditionOperatorSchema =
|
|
306
|
+
var ConditionOperatorSchema = import_zod2.z.enum([
|
|
149
307
|
"equals",
|
|
150
308
|
"not_equals",
|
|
151
309
|
"contains",
|
|
@@ -158,10 +316,10 @@ var ConditionOperatorSchema = import_zod.z.enum([
|
|
|
158
316
|
"lte",
|
|
159
317
|
"regex"
|
|
160
318
|
]);
|
|
161
|
-
var ActionStepConditionSchema =
|
|
162
|
-
field:
|
|
319
|
+
var ActionStepConditionSchema = import_zod2.z.object({
|
|
320
|
+
field: import_zod2.z.string().min(1, "Condition field cannot be empty"),
|
|
163
321
|
operator: ConditionOperatorSchema,
|
|
164
|
-
value:
|
|
322
|
+
value: import_zod2.z.unknown().optional()
|
|
165
323
|
});
|
|
166
324
|
var DANGEROUS_URL_PATTERN = /(javascript:|vbscript:|data:text\/html)/i;
|
|
167
325
|
var DANGEROUS_SCRIPT_PATTERN = /<\s*script/i;
|
|
@@ -172,68 +330,68 @@ function isSafeActionUrl(url) {
|
|
|
172
330
|
if (DANGEROUS_SCRIPT_PATTERN.test(trimmed)) return false;
|
|
173
331
|
return true;
|
|
174
332
|
}
|
|
175
|
-
var SafeUrlStringSchema =
|
|
333
|
+
var SafeUrlStringSchema = import_zod2.z.string().min(1, "URL cannot be empty").refine(isSafeActionUrl, {
|
|
176
334
|
message: "URL contains disallowed or unsafe protocol/script pattern"
|
|
177
335
|
});
|
|
178
|
-
var SafeEventNameSchema =
|
|
336
|
+
var SafeEventNameSchema = import_zod2.z.string().min(1, "Event name cannot be empty").regex(/^[a-zA-Z0-9_\-:]+$/, {
|
|
179
337
|
message: "Event name must contain only alphanumeric characters, dashes, colons, or underscores"
|
|
180
338
|
});
|
|
181
|
-
var ApiRequestStepPayloadSchema =
|
|
339
|
+
var ApiRequestStepPayloadSchema = import_zod2.z.object({
|
|
182
340
|
url: SafeUrlStringSchema,
|
|
183
|
-
method:
|
|
184
|
-
headers:
|
|
185
|
-
queryParams:
|
|
186
|
-
body:
|
|
187
|
-
bodyFormat:
|
|
188
|
-
bodyType:
|
|
189
|
-
timeout:
|
|
190
|
-
responseMapping:
|
|
341
|
+
method: import_zod2.z.enum(["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]).default("GET"),
|
|
342
|
+
headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional(),
|
|
343
|
+
queryParams: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.union([import_zod2.z.string(), import_zod2.z.number(), import_zod2.z.boolean()])).optional(),
|
|
344
|
+
body: import_zod2.z.union([import_zod2.z.string(), import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()), import_zod2.z.array(import_zod2.z.unknown())]).optional(),
|
|
345
|
+
bodyFormat: import_zod2.z.enum(["json", "form-data", "formData", "urlencoded", "url-encoded", "raw", "text"]).optional(),
|
|
346
|
+
bodyType: import_zod2.z.enum(["json", "form-data", "formData", "urlencoded", "url-encoded", "raw", "text"]).optional(),
|
|
347
|
+
timeout: import_zod2.z.number().positive("Timeout must be greater than 0 ms").optional(),
|
|
348
|
+
responseMapping: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional()
|
|
191
349
|
});
|
|
192
|
-
var NavigateStepPayloadSchema =
|
|
350
|
+
var NavigateStepPayloadSchema = import_zod2.z.object({
|
|
193
351
|
url: SafeUrlStringSchema,
|
|
194
|
-
target:
|
|
195
|
-
replace:
|
|
196
|
-
scroll:
|
|
197
|
-
behavior:
|
|
352
|
+
target: import_zod2.z.enum(["_self", "_blank", "_parent", "_top"]).optional().default("_self"),
|
|
353
|
+
replace: import_zod2.z.boolean().optional(),
|
|
354
|
+
scroll: import_zod2.z.boolean().optional(),
|
|
355
|
+
behavior: import_zod2.z.enum(["smooth", "auto"]).optional()
|
|
198
356
|
});
|
|
199
|
-
var SetStateStepPayloadSchema =
|
|
200
|
-
key:
|
|
201
|
-
value:
|
|
202
|
-
scope:
|
|
357
|
+
var SetStateStepPayloadSchema = import_zod2.z.object({
|
|
358
|
+
key: import_zod2.z.string().min(1, "State key cannot be empty"),
|
|
359
|
+
value: import_zod2.z.unknown(),
|
|
360
|
+
scope: import_zod2.z.enum(["runtime", "document", "session", "local"]).optional().default("runtime")
|
|
203
361
|
});
|
|
204
|
-
var ResetFormStepPayloadSchema =
|
|
205
|
-
formId:
|
|
362
|
+
var ResetFormStepPayloadSchema = import_zod2.z.object({
|
|
363
|
+
formId: import_zod2.z.string().optional()
|
|
206
364
|
});
|
|
207
|
-
var ShowToastStepPayloadSchema =
|
|
208
|
-
message:
|
|
209
|
-
type:
|
|
210
|
-
variant:
|
|
211
|
-
title:
|
|
212
|
-
duration:
|
|
213
|
-
position:
|
|
365
|
+
var ShowToastStepPayloadSchema = import_zod2.z.object({
|
|
366
|
+
message: import_zod2.z.string().min(1, "Toast message cannot be empty"),
|
|
367
|
+
type: import_zod2.z.enum(["success", "error", "warning", "info"]).optional().default("info"),
|
|
368
|
+
variant: import_zod2.z.enum(["success", "error", "warning", "info"]).optional(),
|
|
369
|
+
title: import_zod2.z.string().optional(),
|
|
370
|
+
duration: import_zod2.z.number().nonnegative("Duration must be >= 0 ms").optional(),
|
|
371
|
+
position: import_zod2.z.enum(["top-right", "top-left", "bottom-right", "bottom-left", "top-center", "bottom-center"]).optional()
|
|
214
372
|
});
|
|
215
|
-
var OpenModalStepPayloadSchema =
|
|
216
|
-
modalId:
|
|
217
|
-
modalNodeId:
|
|
218
|
-
toggle:
|
|
373
|
+
var OpenModalStepPayloadSchema = import_zod2.z.object({
|
|
374
|
+
modalId: import_zod2.z.string().optional(),
|
|
375
|
+
modalNodeId: import_zod2.z.string().optional(),
|
|
376
|
+
toggle: import_zod2.z.boolean().optional()
|
|
219
377
|
}).refine((data) => Boolean(data.modalId || data.modalNodeId), {
|
|
220
378
|
message: "Modal ID or Modal Node ID cannot be empty"
|
|
221
379
|
});
|
|
222
|
-
var CloseModalStepPayloadSchema =
|
|
223
|
-
modalId:
|
|
224
|
-
modalNodeId:
|
|
380
|
+
var CloseModalStepPayloadSchema = import_zod2.z.object({
|
|
381
|
+
modalId: import_zod2.z.string().optional(),
|
|
382
|
+
modalNodeId: import_zod2.z.string().optional()
|
|
225
383
|
});
|
|
226
|
-
var CopyClipboardStepPayloadSchema =
|
|
227
|
-
text:
|
|
228
|
-
value:
|
|
229
|
-
notify:
|
|
230
|
-
toastMessage:
|
|
384
|
+
var CopyClipboardStepPayloadSchema = import_zod2.z.object({
|
|
385
|
+
text: import_zod2.z.string().optional(),
|
|
386
|
+
value: import_zod2.z.unknown().optional(),
|
|
387
|
+
notify: import_zod2.z.boolean().optional(),
|
|
388
|
+
toastMessage: import_zod2.z.string().optional()
|
|
231
389
|
});
|
|
232
|
-
var CustomEventStepPayloadSchema =
|
|
390
|
+
var CustomEventStepPayloadSchema = import_zod2.z.object({
|
|
233
391
|
eventName: SafeEventNameSchema,
|
|
234
|
-
detail:
|
|
235
|
-
bubbles:
|
|
236
|
-
cancelable:
|
|
392
|
+
detail: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()).optional(),
|
|
393
|
+
bubbles: import_zod2.z.boolean().optional().default(true),
|
|
394
|
+
cancelable: import_zod2.z.boolean().optional().default(true)
|
|
237
395
|
});
|
|
238
396
|
var StepPayloadSchemas = {
|
|
239
397
|
api_request: ApiRequestStepPayloadSchema,
|
|
@@ -244,29 +402,30 @@ var StepPayloadSchemas = {
|
|
|
244
402
|
open_modal: OpenModalStepPayloadSchema,
|
|
245
403
|
close_modal: CloseModalStepPayloadSchema,
|
|
246
404
|
copy_clipboard: CopyClipboardStepPayloadSchema,
|
|
247
|
-
custom_event: CustomEventStepPayloadSchema
|
|
405
|
+
custom_event: CustomEventStepPayloadSchema,
|
|
406
|
+
track_event: TrackEventStepPayloadSchema
|
|
248
407
|
};
|
|
249
|
-
var ActionStepSchema =
|
|
250
|
-
() =>
|
|
251
|
-
id:
|
|
408
|
+
var ActionStepSchema = import_zod2.z.lazy(
|
|
409
|
+
() => import_zod2.z.object({
|
|
410
|
+
id: import_zod2.z.string().min(1, "Step ID cannot be empty"),
|
|
252
411
|
type: ActionStepTypeSchema,
|
|
253
|
-
label:
|
|
254
|
-
payload:
|
|
412
|
+
label: import_zod2.z.string().optional(),
|
|
413
|
+
payload: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()).optional().default({}),
|
|
255
414
|
condition: ActionStepConditionSchema.optional(),
|
|
256
|
-
timeout:
|
|
257
|
-
continueOnError:
|
|
258
|
-
onSuccess:
|
|
259
|
-
onError:
|
|
415
|
+
timeout: import_zod2.z.number().positive().optional(),
|
|
416
|
+
continueOnError: import_zod2.z.boolean().optional(),
|
|
417
|
+
onSuccess: import_zod2.z.array(ActionStepSchema).optional(),
|
|
418
|
+
onError: import_zod2.z.array(ActionStepSchema).optional()
|
|
260
419
|
})
|
|
261
420
|
);
|
|
262
|
-
var ActionPipelineSchema =
|
|
263
|
-
id:
|
|
421
|
+
var ActionPipelineSchema = import_zod2.z.object({
|
|
422
|
+
id: import_zod2.z.string().min(1, "Pipeline ID cannot be empty"),
|
|
264
423
|
trigger: ActionTriggerTypeSchema,
|
|
265
|
-
label:
|
|
266
|
-
debounceMs:
|
|
267
|
-
preventDuplicate:
|
|
268
|
-
enabled:
|
|
269
|
-
steps:
|
|
424
|
+
label: import_zod2.z.string().optional(),
|
|
425
|
+
debounceMs: import_zod2.z.number().nonnegative("Debounce ms must be >= 0").optional(),
|
|
426
|
+
preventDuplicate: import_zod2.z.boolean().optional(),
|
|
427
|
+
enabled: import_zod2.z.boolean().optional().default(true),
|
|
428
|
+
steps: import_zod2.z.array(ActionStepSchema).min(1, "Action pipeline must contain at least one step")
|
|
270
429
|
});
|
|
271
430
|
function isActionTriggerType(value) {
|
|
272
431
|
return ActionTriggerTypeSchema.safeParse(value).success;
|
|
@@ -291,9 +450,9 @@ function validateActionStepPayload(type, payload) {
|
|
|
291
450
|
if (!schema) {
|
|
292
451
|
return {
|
|
293
452
|
success: false,
|
|
294
|
-
error: new
|
|
453
|
+
error: new import_zod2.z.ZodError([
|
|
295
454
|
{
|
|
296
|
-
code:
|
|
455
|
+
code: import_zod2.z.ZodIssueCode.custom,
|
|
297
456
|
message: `Unknown step type: ${type}`,
|
|
298
457
|
path: ["type"]
|
|
299
458
|
}
|
|
@@ -381,8 +540,8 @@ function sanitizeActionPipeline(pipeline) {
|
|
|
381
540
|
}
|
|
382
541
|
|
|
383
542
|
// src/form.ts
|
|
384
|
-
var
|
|
385
|
-
var ValidationRuleTypeSchema =
|
|
543
|
+
var import_zod3 = require("zod");
|
|
544
|
+
var ValidationRuleTypeSchema = import_zod3.z.enum([
|
|
386
545
|
"required",
|
|
387
546
|
"email",
|
|
388
547
|
"url",
|
|
@@ -394,29 +553,29 @@ var ValidationRuleTypeSchema = import_zod2.z.enum([
|
|
|
394
553
|
"match_field",
|
|
395
554
|
"custom_regex"
|
|
396
555
|
]);
|
|
397
|
-
var ValidateOnEventSchema =
|
|
398
|
-
var ValidationRuleSchema =
|
|
556
|
+
var ValidateOnEventSchema = import_zod3.z.enum(["blur", "change", "submit"]);
|
|
557
|
+
var ValidationRuleSchema = import_zod3.z.object({
|
|
399
558
|
type: ValidationRuleTypeSchema,
|
|
400
|
-
value:
|
|
401
|
-
message:
|
|
559
|
+
value: import_zod3.z.unknown().optional(),
|
|
560
|
+
message: import_zod3.z.string().min(1, "Validation error message cannot be empty")
|
|
402
561
|
});
|
|
403
|
-
var FormFieldBindingSchema =
|
|
404
|
-
name:
|
|
405
|
-
label:
|
|
406
|
-
defaultValue:
|
|
407
|
-
rules:
|
|
562
|
+
var FormFieldBindingSchema = import_zod3.z.object({
|
|
563
|
+
name: import_zod3.z.string().min(1, "Field name cannot be empty"),
|
|
564
|
+
label: import_zod3.z.string().optional(),
|
|
565
|
+
defaultValue: import_zod3.z.unknown().optional(),
|
|
566
|
+
rules: import_zod3.z.array(ValidationRuleSchema).optional().default([]),
|
|
408
567
|
validateOn: ValidateOnEventSchema.optional().default("blur"),
|
|
409
|
-
transform:
|
|
410
|
-
disabled:
|
|
411
|
-
required:
|
|
568
|
+
transform: import_zod3.z.enum(["trim", "lowercase", "uppercase", "number"]).optional(),
|
|
569
|
+
disabled: import_zod3.z.boolean().optional(),
|
|
570
|
+
required: import_zod3.z.boolean().optional()
|
|
412
571
|
});
|
|
413
|
-
var FormConfigSchema =
|
|
414
|
-
formId:
|
|
415
|
-
resetOnSubmit:
|
|
416
|
-
scrollToFirstError:
|
|
572
|
+
var FormConfigSchema = import_zod3.z.object({
|
|
573
|
+
formId: import_zod3.z.string().min(1, "Form ID cannot be empty"),
|
|
574
|
+
resetOnSubmit: import_zod3.z.boolean().optional().default(false),
|
|
575
|
+
scrollToFirstError: import_zod3.z.boolean().optional().default(true),
|
|
417
576
|
validateOn: ValidateOnEventSchema.optional().default("blur"),
|
|
418
|
-
initialValues:
|
|
419
|
-
rules:
|
|
577
|
+
initialValues: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional(),
|
|
578
|
+
rules: import_zod3.z.array(ValidationRuleSchema).optional()
|
|
420
579
|
});
|
|
421
580
|
function isValidationRuleType(value) {
|
|
422
581
|
return ValidationRuleTypeSchema.safeParse(value).success;
|
|
@@ -437,55 +596,55 @@ function isFormConfig(value) {
|
|
|
437
596
|
// src/document.ts
|
|
438
597
|
var SCHEMA_NAME = "stora.page";
|
|
439
598
|
var CURRENT_SCHEMA_VERSION = "1.0.0";
|
|
440
|
-
var AssetReferenceSchema =
|
|
441
|
-
type:
|
|
442
|
-
assetId:
|
|
443
|
-
filename:
|
|
444
|
-
mimeType:
|
|
445
|
-
fallbackUrl:
|
|
599
|
+
var AssetReferenceSchema = import_zod4.z.object({
|
|
600
|
+
type: import_zod4.z.literal("asset"),
|
|
601
|
+
assetId: import_zod4.z.string().min(1, "Asset ID cannot be empty"),
|
|
602
|
+
filename: import_zod4.z.string().optional(),
|
|
603
|
+
mimeType: import_zod4.z.string().optional(),
|
|
604
|
+
fallbackUrl: import_zod4.z.string().url().optional()
|
|
446
605
|
});
|
|
447
|
-
var VariableBindingSchema =
|
|
448
|
-
type:
|
|
449
|
-
key:
|
|
450
|
-
fallback:
|
|
606
|
+
var VariableBindingSchema = import_zod4.z.object({
|
|
607
|
+
type: import_zod4.z.literal("variable"),
|
|
608
|
+
key: import_zod4.z.string().min(1, "Variable key cannot be empty"),
|
|
609
|
+
fallback: import_zod4.z.unknown().optional()
|
|
451
610
|
});
|
|
452
|
-
var ActionBindingSchema =
|
|
453
|
-
type:
|
|
454
|
-
payload:
|
|
611
|
+
var ActionBindingSchema = import_zod4.z.object({
|
|
612
|
+
type: import_zod4.z.string().min(1, "Action type cannot be empty"),
|
|
613
|
+
payload: import_zod4.z.record(import_zod4.z.string(), import_zod4.z.unknown()).optional()
|
|
455
614
|
});
|
|
456
615
|
var DANGEROUS_STYLE_VALUE_PATTERN = /javascript:|expression\(|@import|<script|vbscript:|data:text\/html/i;
|
|
457
|
-
var StyleValueSchema =
|
|
458
|
-
|
|
616
|
+
var StyleValueSchema = import_zod4.z.union([
|
|
617
|
+
import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
|
|
459
618
|
message: "Style value contains a disallowed or unsafe pattern"
|
|
460
619
|
}),
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
620
|
+
import_zod4.z.number(),
|
|
621
|
+
import_zod4.z.boolean(),
|
|
622
|
+
import_zod4.z.null(),
|
|
623
|
+
import_zod4.z.undefined()
|
|
465
624
|
]);
|
|
466
|
-
var StyleDefinitionSchema =
|
|
467
|
-
var PseudoStateStylesSchema =
|
|
468
|
-
var ResponsiveStylesSchema =
|
|
625
|
+
var StyleDefinitionSchema = import_zod4.z.record(import_zod4.z.string(), StyleValueSchema);
|
|
626
|
+
var PseudoStateStylesSchema = import_zod4.z.record(import_zod4.z.string(), StyleDefinitionSchema);
|
|
627
|
+
var ResponsiveStylesSchema = import_zod4.z.object({
|
|
469
628
|
base: StyleDefinitionSchema.optional(),
|
|
470
629
|
desktop: StyleDefinitionSchema.optional(),
|
|
471
630
|
tablet: StyleDefinitionSchema.optional(),
|
|
472
631
|
mobile: StyleDefinitionSchema.optional(),
|
|
473
632
|
states: PseudoStateStylesSchema.optional()
|
|
474
633
|
}).passthrough().default({});
|
|
475
|
-
var AnimationConfigSchema =
|
|
476
|
-
type:
|
|
634
|
+
var AnimationConfigSchema = import_zod4.z.object({
|
|
635
|
+
type: import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
|
|
477
636
|
message: "Animation type contains a disallowed or unsafe pattern"
|
|
478
637
|
}).optional().default("none"),
|
|
479
|
-
duration:
|
|
480
|
-
delay:
|
|
481
|
-
easing:
|
|
638
|
+
duration: import_zod4.z.number().min(0, "Duration must be non-negative").optional().default(600),
|
|
639
|
+
delay: import_zod4.z.number().min(0, "Delay must be non-negative").optional().default(0),
|
|
640
|
+
easing: import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
|
|
482
641
|
message: "Animation easing contains a disallowed or unsafe pattern"
|
|
483
642
|
}).optional().default("ease-out"),
|
|
484
|
-
once:
|
|
485
|
-
hoverEffect:
|
|
643
|
+
once: import_zod4.z.boolean().optional().default(true),
|
|
644
|
+
hoverEffect: import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
|
|
486
645
|
message: "Hover effect contains a disallowed or unsafe pattern"
|
|
487
646
|
}).optional().default("none"),
|
|
488
|
-
loopEffect:
|
|
647
|
+
loopEffect: import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
|
|
489
648
|
message: "Loop effect contains a disallowed or unsafe pattern"
|
|
490
649
|
}).optional().default("none")
|
|
491
650
|
});
|
|
@@ -498,16 +657,16 @@ var DEFAULT_ANIMATION_CONFIG = {
|
|
|
498
657
|
hoverEffect: "none",
|
|
499
658
|
loopEffect: "none"
|
|
500
659
|
};
|
|
501
|
-
var NodeSchema =
|
|
502
|
-
() =>
|
|
503
|
-
id:
|
|
504
|
-
type:
|
|
505
|
-
props:
|
|
660
|
+
var NodeSchema = import_zod4.z.lazy(
|
|
661
|
+
() => import_zod4.z.object({
|
|
662
|
+
id: import_zod4.z.string().min(1, "Node ID must be a non-empty string"),
|
|
663
|
+
type: import_zod4.z.string().min(1, "Node type must be a non-empty string"),
|
|
664
|
+
props: import_zod4.z.record(import_zod4.z.string(), import_zod4.z.unknown()).optional().default({}),
|
|
506
665
|
styles: ResponsiveStylesSchema.optional().default({}),
|
|
507
666
|
animation: AnimationConfigSchema.optional(),
|
|
508
|
-
actions:
|
|
667
|
+
actions: import_zod4.z.array(ActionPipelineSchema).optional(),
|
|
509
668
|
formConfig: FormConfigSchema.optional(),
|
|
510
|
-
children:
|
|
669
|
+
children: import_zod4.z.array(NodeSchema).optional().default([])
|
|
511
670
|
})
|
|
512
671
|
);
|
|
513
672
|
var RootPageNodeSchema = NodeSchema.refine(
|
|
@@ -517,61 +676,64 @@ var RootPageNodeSchema = NodeSchema.refine(
|
|
|
517
676
|
path: ["type"]
|
|
518
677
|
}
|
|
519
678
|
);
|
|
520
|
-
var DocumentMetadataSchema =
|
|
521
|
-
title:
|
|
522
|
-
description:
|
|
523
|
-
author:
|
|
524
|
-
createdAt:
|
|
525
|
-
updatedAt:
|
|
526
|
-
tags:
|
|
527
|
-
category:
|
|
528
|
-
version:
|
|
529
|
-
custom:
|
|
679
|
+
var DocumentMetadataSchema = import_zod4.z.object({
|
|
680
|
+
title: import_zod4.z.string().min(1, "Title is required").default("Untitled Page"),
|
|
681
|
+
description: import_zod4.z.string().optional().default(""),
|
|
682
|
+
author: import_zod4.z.string().optional().default(""),
|
|
683
|
+
createdAt: import_zod4.z.string().optional(),
|
|
684
|
+
updatedAt: import_zod4.z.string().optional(),
|
|
685
|
+
tags: import_zod4.z.array(import_zod4.z.string()).optional().default([]),
|
|
686
|
+
category: import_zod4.z.string().optional().default("general"),
|
|
687
|
+
version: import_zod4.z.string().optional().default("1.0.0"),
|
|
688
|
+
custom: import_zod4.z.record(import_zod4.z.string(), import_zod4.z.unknown()).optional(),
|
|
689
|
+
tracking: TrackingConfigSchema.optional()
|
|
530
690
|
});
|
|
531
|
-
var PageDocumentSchema =
|
|
532
|
-
schema:
|
|
533
|
-
version:
|
|
691
|
+
var PageDocumentSchema = import_zod4.z.object({
|
|
692
|
+
schema: import_zod4.z.literal(SCHEMA_NAME),
|
|
693
|
+
version: import_zod4.z.string().min(1, "Schema version is required").default(CURRENT_SCHEMA_VERSION),
|
|
534
694
|
metadata: DocumentMetadataSchema.optional(),
|
|
695
|
+
tracking: TrackingConfigSchema.optional(),
|
|
535
696
|
document: RootPageNodeSchema
|
|
536
697
|
});
|
|
537
698
|
var PROJECT_SCHEMA_NAME = "stora.project";
|
|
538
699
|
var CURRENT_PROJECT_SCHEMA_VERSION = "1.0.0";
|
|
539
700
|
var ARTBOARD_REFERENCE_NODE_TYPE = "artboard-reference";
|
|
540
|
-
var ArtboardTypeSchema =
|
|
541
|
-
var ArtboardSchema =
|
|
542
|
-
id:
|
|
543
|
-
name:
|
|
701
|
+
var ArtboardTypeSchema = import_zod4.z.enum(["page", "component"]);
|
|
702
|
+
var ArtboardSchema = import_zod4.z.object({
|
|
703
|
+
id: import_zod4.z.string().min(1, "Artboard ID is required"),
|
|
704
|
+
name: import_zod4.z.string().min(1, "Artboard name is required"),
|
|
544
705
|
artboardType: ArtboardTypeSchema,
|
|
545
706
|
/** Route for page artboards (e.g. "/about"). */
|
|
546
|
-
slug:
|
|
707
|
+
slug: import_zod4.z.string().optional(),
|
|
547
708
|
/**
|
|
548
709
|
* For component artboards: the id that `open_modal` / `close_modal` actions target.
|
|
549
710
|
* Mirrors the detached node's own `props.modalId` so ModalManager keeps working unchanged.
|
|
550
711
|
*/
|
|
551
|
-
triggerId:
|
|
712
|
+
triggerId: import_zod4.z.string().optional(),
|
|
552
713
|
/**
|
|
553
714
|
* Viewport/breakpoint this artboard is currently authored at. Declared inline
|
|
554
715
|
* (rather than imported) because viewport is otherwise an editor/renderer concept.
|
|
555
716
|
*/
|
|
556
|
-
viewport:
|
|
717
|
+
viewport: import_zod4.z.enum(["desktop", "tablet", "mobile"]).optional(),
|
|
557
718
|
/** Persisted artboard width in px, matching the canvas ViewportResizer's `width`. */
|
|
558
|
-
width:
|
|
719
|
+
width: import_zod4.z.number().positive().optional(),
|
|
559
720
|
/**
|
|
560
721
|
* Free position on the builder's infinite canvas, in unscaled canvas px. Absent means
|
|
561
722
|
* "not placed yet" — the canvas then falls back to laying the artboard out in a row.
|
|
562
723
|
*/
|
|
563
|
-
position:
|
|
564
|
-
x:
|
|
565
|
-
y:
|
|
724
|
+
position: import_zod4.z.object({
|
|
725
|
+
x: import_zod4.z.number(),
|
|
726
|
+
y: import_zod4.z.number()
|
|
566
727
|
}).optional(),
|
|
567
728
|
document: PageDocumentSchema
|
|
568
729
|
});
|
|
569
|
-
var ProjectDocumentSchema =
|
|
570
|
-
schema:
|
|
571
|
-
version:
|
|
730
|
+
var ProjectDocumentSchema = import_zod4.z.object({
|
|
731
|
+
schema: import_zod4.z.literal(PROJECT_SCHEMA_NAME),
|
|
732
|
+
version: import_zod4.z.string().min(1, "Schema version is required").default(CURRENT_PROJECT_SCHEMA_VERSION),
|
|
572
733
|
metadata: DocumentMetadataSchema.optional(),
|
|
573
|
-
|
|
574
|
-
|
|
734
|
+
tracking: TrackingConfigSchema.optional(),
|
|
735
|
+
artboards: import_zod4.z.array(ArtboardSchema).min(1, "A project needs at least one artboard"),
|
|
736
|
+
activeArtboardId: import_zod4.z.string().optional()
|
|
575
737
|
});
|
|
576
738
|
function isAssetReference(value) {
|
|
577
739
|
return AssetReferenceSchema.safeParse(value).success;
|
|
@@ -627,30 +789,30 @@ function validateNodeIdUniqueness(node) {
|
|
|
627
789
|
}
|
|
628
790
|
|
|
629
791
|
// src/manifest.ts
|
|
630
|
-
var
|
|
631
|
-
var ManifestAssetItemSchema =
|
|
632
|
-
id:
|
|
633
|
-
path:
|
|
634
|
-
mimeType:
|
|
635
|
-
size:
|
|
636
|
-
checksum:
|
|
792
|
+
var import_zod5 = require("zod");
|
|
793
|
+
var ManifestAssetItemSchema = import_zod5.z.object({
|
|
794
|
+
id: import_zod5.z.string().min(1, "Asset ID cannot be empty"),
|
|
795
|
+
path: import_zod5.z.string().min(1, "Asset archive path cannot be empty"),
|
|
796
|
+
mimeType: import_zod5.z.string().min(1, "MIME type cannot be empty"),
|
|
797
|
+
size: import_zod5.z.number().nonnegative("Asset size must be non-negative"),
|
|
798
|
+
checksum: import_zod5.z.string().optional()
|
|
637
799
|
});
|
|
638
|
-
var ManifestSchema =
|
|
639
|
-
schema:
|
|
640
|
-
schemaVersion:
|
|
641
|
-
packageVersion:
|
|
642
|
-
builderCompatibility:
|
|
643
|
-
requiredComponents:
|
|
644
|
-
requiredCapabilities:
|
|
645
|
-
assets:
|
|
646
|
-
createdAt:
|
|
800
|
+
var ManifestSchema = import_zod5.z.object({
|
|
801
|
+
schema: import_zod5.z.literal(SCHEMA_NAME).default(SCHEMA_NAME),
|
|
802
|
+
schemaVersion: import_zod5.z.string().min(1, "Schema version cannot be empty").default("1.0.0"),
|
|
803
|
+
packageVersion: import_zod5.z.string().min(1, "Package version cannot be empty").default("1.0.0"),
|
|
804
|
+
builderCompatibility: import_zod5.z.string().default(">=0.1.0"),
|
|
805
|
+
requiredComponents: import_zod5.z.array(import_zod5.z.string()).default([]),
|
|
806
|
+
requiredCapabilities: import_zod5.z.array(import_zod5.z.string()).default([]),
|
|
807
|
+
assets: import_zod5.z.array(ManifestAssetItemSchema).default([]),
|
|
808
|
+
createdAt: import_zod5.z.string().optional()
|
|
647
809
|
});
|
|
648
810
|
function isManifest(value) {
|
|
649
811
|
return ManifestSchema.safeParse(value).success;
|
|
650
812
|
}
|
|
651
813
|
|
|
652
814
|
// src/template.ts
|
|
653
|
-
var
|
|
815
|
+
var import_zod6 = require("zod");
|
|
654
816
|
var DANGEROUS_URI_PATTERN = /^(javascript:|vbscript:|data:(?!image\/))|<script/i;
|
|
655
817
|
function isSafeThumbnailUrl(url) {
|
|
656
818
|
if (!url || typeof url !== "string") return false;
|
|
@@ -659,49 +821,49 @@ function isSafeThumbnailUrl(url) {
|
|
|
659
821
|
if (DANGEROUS_URI_PATTERN.test(trimmed)) return false;
|
|
660
822
|
return true;
|
|
661
823
|
}
|
|
662
|
-
var SafeThumbnailUrlSchema =
|
|
824
|
+
var SafeThumbnailUrlSchema = import_zod6.z.string().min(1, "Thumbnail URL cannot be empty").refine(
|
|
663
825
|
(url) => isSafeThumbnailUrl(url),
|
|
664
826
|
{ message: "Thumbnail URL contains an unsafe protocol or payload" }
|
|
665
827
|
);
|
|
666
|
-
var SafeThumbnailObjectSchema =
|
|
828
|
+
var SafeThumbnailObjectSchema = import_zod6.z.object({
|
|
667
829
|
url: SafeThumbnailUrlSchema,
|
|
668
|
-
alt:
|
|
669
|
-
width:
|
|
670
|
-
height:
|
|
830
|
+
alt: import_zod6.z.string().optional(),
|
|
831
|
+
width: import_zod6.z.number().positive().optional(),
|
|
832
|
+
height: import_zod6.z.number().positive().optional()
|
|
671
833
|
});
|
|
672
|
-
var SafeThumbnailSchema =
|
|
834
|
+
var SafeThumbnailSchema = import_zod6.z.union([
|
|
673
835
|
AssetReferenceSchema,
|
|
674
836
|
SafeThumbnailObjectSchema,
|
|
675
837
|
SafeThumbnailUrlSchema
|
|
676
838
|
]);
|
|
677
|
-
var TemplatePackageRefSchema =
|
|
678
|
-
path:
|
|
839
|
+
var TemplatePackageRefSchema = import_zod6.z.object({
|
|
840
|
+
path: import_zod6.z.string().optional(),
|
|
679
841
|
url: SafeThumbnailUrlSchema.optional(),
|
|
680
|
-
checksum:
|
|
681
|
-
format:
|
|
842
|
+
checksum: import_zod6.z.string().optional(),
|
|
843
|
+
format: import_zod6.z.enum(["stora", "json"]).default("stora")
|
|
682
844
|
});
|
|
683
|
-
var TemplateRequirementsSchema =
|
|
684
|
-
requiredComponents:
|
|
685
|
-
requiredCapabilities:
|
|
845
|
+
var TemplateRequirementsSchema = import_zod6.z.object({
|
|
846
|
+
requiredComponents: import_zod6.z.array(import_zod6.z.string()).default([]),
|
|
847
|
+
requiredCapabilities: import_zod6.z.array(import_zod6.z.string()).default([])
|
|
686
848
|
});
|
|
687
|
-
var TemplateRecordSchema =
|
|
688
|
-
id:
|
|
689
|
-
name:
|
|
690
|
-
description:
|
|
691
|
-
category:
|
|
692
|
-
tags:
|
|
849
|
+
var TemplateRecordSchema = import_zod6.z.object({
|
|
850
|
+
id: import_zod6.z.string().min(1, "Template ID must be a non-empty string"),
|
|
851
|
+
name: import_zod6.z.string().min(1, "Template name must be a non-empty string"),
|
|
852
|
+
description: import_zod6.z.string().optional().default(""),
|
|
853
|
+
category: import_zod6.z.string().optional().default("general"),
|
|
854
|
+
tags: import_zod6.z.array(import_zod6.z.string()).optional().default([]),
|
|
693
855
|
thumbnail: SafeThumbnailSchema.optional(),
|
|
694
|
-
author:
|
|
695
|
-
version:
|
|
856
|
+
author: import_zod6.z.string().optional().default(""),
|
|
857
|
+
version: import_zod6.z.string().optional().default("1.0.0"),
|
|
696
858
|
document: PageDocumentSchema.optional(),
|
|
697
859
|
packageReference: TemplatePackageRefSchema.optional(),
|
|
698
860
|
requirements: TemplateRequirementsSchema.default({
|
|
699
861
|
requiredComponents: [],
|
|
700
862
|
requiredCapabilities: []
|
|
701
863
|
}),
|
|
702
|
-
createdAt:
|
|
703
|
-
updatedAt:
|
|
704
|
-
custom:
|
|
864
|
+
createdAt: import_zod6.z.string().optional(),
|
|
865
|
+
updatedAt: import_zod6.z.string().optional(),
|
|
866
|
+
custom: import_zod6.z.record(import_zod6.z.string(), import_zod6.z.unknown()).optional()
|
|
705
867
|
});
|
|
706
868
|
function isTemplateRecord(value) {
|
|
707
869
|
return TemplateRecordSchema.safeParse(value).success;
|
|
@@ -1751,15 +1913,19 @@ function getFormFieldBindingJsonSchema() {
|
|
|
1751
1913
|
ConditionOperatorSchema,
|
|
1752
1914
|
CopyClipboardStepPayloadSchema,
|
|
1753
1915
|
CustomEventStepPayloadSchema,
|
|
1916
|
+
CustomTrackingProviderConfigSchema,
|
|
1754
1917
|
DEFAULT_ANIMATION_CONFIG,
|
|
1755
1918
|
DocumentMetadataSchema,
|
|
1756
1919
|
FORM_CONFIG_JSON_SCHEMA_V1,
|
|
1757
1920
|
FORM_FIELD_BINDING_JSON_SCHEMA_V1,
|
|
1758
1921
|
FormConfigSchema,
|
|
1759
1922
|
FormFieldBindingSchema,
|
|
1923
|
+
GoogleTrackingProviderConfigSchema,
|
|
1924
|
+
GtmTrackingProviderConfigSchema,
|
|
1760
1925
|
MANIFEST_JSON_SCHEMA_V1,
|
|
1761
1926
|
ManifestAssetItemSchema,
|
|
1762
1927
|
ManifestSchema,
|
|
1928
|
+
MetaTrackingProviderConfigSchema,
|
|
1763
1929
|
NavigateStepPayloadSchema,
|
|
1764
1930
|
NodeSchema,
|
|
1765
1931
|
OpenModalStepPayloadSchema,
|
|
@@ -1777,6 +1943,7 @@ function getFormFieldBindingJsonSchema() {
|
|
|
1777
1943
|
SafeThumbnailUrlSchema,
|
|
1778
1944
|
SetStateStepPayloadSchema,
|
|
1779
1945
|
ShowToastStepPayloadSchema,
|
|
1946
|
+
StandardTrackingEventSchema,
|
|
1780
1947
|
StepPayloadSchemas,
|
|
1781
1948
|
StyleDefinitionSchema,
|
|
1782
1949
|
StyleValueSchema,
|
|
@@ -1784,6 +1951,11 @@ function getFormFieldBindingJsonSchema() {
|
|
|
1784
1951
|
TemplatePackageRefSchema,
|
|
1785
1952
|
TemplateRecordSchema,
|
|
1786
1953
|
TemplateRequirementsSchema,
|
|
1954
|
+
TikTokTrackingProviderConfigSchema,
|
|
1955
|
+
TrackEventStepPayloadSchema,
|
|
1956
|
+
TrackingConfigSchema,
|
|
1957
|
+
TrackingDeliverySchema,
|
|
1958
|
+
TrackingProviderTypeSchema,
|
|
1787
1959
|
ValidateOnEventSchema,
|
|
1788
1960
|
ValidationRuleSchema,
|
|
1789
1961
|
ValidationRuleTypeSchema,
|
|
@@ -1814,6 +1986,8 @@ function getFormFieldBindingJsonSchema() {
|
|
|
1814
1986
|
isSafeThumbnail,
|
|
1815
1987
|
isSafeThumbnailUrl,
|
|
1816
1988
|
isTemplateRecord,
|
|
1989
|
+
isTrackEventStepPayload,
|
|
1990
|
+
isTrackingConfig,
|
|
1817
1991
|
isValidateOnEvent,
|
|
1818
1992
|
isValidationRule,
|
|
1819
1993
|
isValidationRuleType,
|