@syntrologie/adapt-faq 2.16.0 → 2.18.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/chunk-5WRI5ZAA.js +31 -0
- package/dist/chunk-5WRI5ZAA.js.map +7 -0
- package/dist/chunk-S6WIENQP.js +578 -0
- package/dist/chunk-S6WIENQP.js.map +7 -0
- package/dist/editor.d.ts +35 -33
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +4821 -308
- package/dist/editor.js.map +7 -0
- package/dist/runtime.d.ts +3 -5
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +848 -91
- package/dist/runtime.js.map +7 -0
- package/dist/schema.d.ts +609 -77
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +444 -206
- package/dist/schema.js.map +7 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -20
- package/dist/FAQWidget.d.ts +0 -33
- package/dist/FAQWidget.d.ts.map +0 -1
- package/dist/FAQWidget.js +0 -375
- package/dist/FAQWidgetLit.js +0 -534
- package/dist/cdn.d.ts +0 -70
- package/dist/cdn.d.ts.map +0 -1
- package/dist/cdn.js +0 -46
- package/dist/editor-lit.d.ts +0 -37
- package/dist/editor-lit.d.ts.map +0 -1
- package/dist/editor-lit.js +0 -195
- package/dist/executors.js +0 -150
- package/dist/faq-styles.js +0 -204
- package/dist/faq-types.js +0 -7
- package/dist/runtime-lit.d.ts +0 -85
- package/dist/runtime-lit.d.ts.map +0 -1
- package/dist/runtime-lit.js +0 -94
- package/dist/state.js +0 -132
- package/dist/summarize.js +0 -62
- package/dist/types.js +0 -17
- package/node_modules/@syntrologie/sdk-contracts/dist/index.d.ts +0 -129
- package/node_modules/@syntrologie/sdk-contracts/dist/index.js +0 -17
- package/node_modules/@syntrologie/sdk-contracts/dist/schemas.d.ts +0 -2296
- package/node_modules/@syntrologie/sdk-contracts/dist/schemas.js +0 -361
- package/node_modules/@syntrologie/sdk-contracts/package.json +0 -33
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared Zod schemas for decision strategies, conditions, and event scoping.
|
|
3
|
-
*
|
|
4
|
-
* These are the canonical definitions — runtime-sdk and all adaptive packages
|
|
5
|
-
* should import from here instead of duplicating.
|
|
6
|
-
*/
|
|
7
|
-
import { z } from 'zod';
|
|
8
|
-
// =============================================================================
|
|
9
|
-
// ANCHOR ID SCHEMA
|
|
10
|
-
// =============================================================================
|
|
11
|
-
export const AnchorIdZ = z
|
|
12
|
-
.object({
|
|
13
|
-
selector: z.string(),
|
|
14
|
-
route: z.union([z.string(), z.array(z.string())]),
|
|
15
|
-
})
|
|
16
|
-
.strict();
|
|
17
|
-
// =============================================================================
|
|
18
|
-
// TRIGGER VOCABULARY — canonical lists of valid event names, metric keys, etc.
|
|
19
|
-
// These flow through to the JSON schema as enums and are used by the LLM prompt.
|
|
20
|
-
// =============================================================================
|
|
21
|
-
/** Events that can be counted in event_count conditions. */
|
|
22
|
-
export const COUNTABLE_EVENTS = [
|
|
23
|
-
// User interactions (from PostHog autocapture normalization)
|
|
24
|
-
'ui.click',
|
|
25
|
-
'ui.scroll',
|
|
26
|
-
'ui.input',
|
|
27
|
-
'ui.change',
|
|
28
|
-
'ui.submit',
|
|
29
|
-
// Behavioral detectors (from event-processor)
|
|
30
|
-
'ui.hover',
|
|
31
|
-
'ui.idle',
|
|
32
|
-
'ui.scroll_thrash',
|
|
33
|
-
'ui.focus_bounce',
|
|
34
|
-
// Navigation
|
|
35
|
-
'nav.page_view',
|
|
36
|
-
'nav.page_leave',
|
|
37
|
-
// Derived behavioral signals
|
|
38
|
-
'behavior.rage_click',
|
|
39
|
-
'behavior.hesitation',
|
|
40
|
-
'behavior.confusion',
|
|
41
|
-
];
|
|
42
|
-
export const CountableEventZ = z
|
|
43
|
-
.enum(COUNTABLE_EVENTS)
|
|
44
|
-
.describe('Event name to count. ui.* = user interactions and behavioral detectors, nav.* = page navigation, behavior.* = derived behavioral signals.');
|
|
45
|
-
/** Valid session metric keys. */
|
|
46
|
-
export const SESSION_METRIC_KEYS = ['time_on_page', 'page_views', 'scroll_depth'];
|
|
47
|
-
export const SessionMetricKeyZ = z
|
|
48
|
-
.enum(SESSION_METRIC_KEYS)
|
|
49
|
-
.describe('Session metric key. time_on_page = seconds on current page, page_views = pages visited this session, scroll_depth = 0-100 percentage.');
|
|
50
|
-
/** Element chain match field prefixes for counter filters. */
|
|
51
|
-
export const ELEMENT_MATCH_FIELDS = ['tag_name', '$el_text'];
|
|
52
|
-
// Note: attr__* is a dynamic prefix (attr__data-id, attr__class, attr__href, etc.)
|
|
53
|
-
// and cannot be enumerated. The match key is either one of ELEMENT_MATCH_FIELDS
|
|
54
|
-
// or starts with "attr__".
|
|
55
|
-
// =============================================================================
|
|
56
|
-
// CONDITION SCHEMAS
|
|
57
|
-
// =============================================================================
|
|
58
|
-
export const PageUrlConditionZ = z
|
|
59
|
-
.object({
|
|
60
|
-
type: z.literal('page_url'),
|
|
61
|
-
url: z.string().describe('URL path to match (e.g. "/pricing", "/dashboard")'),
|
|
62
|
-
})
|
|
63
|
-
.describe('Fires when the current page URL matches. Use for page-specific actions. ' +
|
|
64
|
-
'Example: {"type": "page_url", "url": "/pricing"}');
|
|
65
|
-
export const RouteConditionZ = z
|
|
66
|
-
.object({
|
|
67
|
-
type: z.literal('route'),
|
|
68
|
-
routeId: z.string().describe('Named route ID from the route filter'),
|
|
69
|
-
})
|
|
70
|
-
.describe('Fires when the current route matches a named route ID.');
|
|
71
|
-
export const AnchorVisibleConditionZ = z
|
|
72
|
-
.object({
|
|
73
|
-
type: z.literal('anchor_visible'),
|
|
74
|
-
anchorId: z.string().describe('CSS selector of the anchor element'),
|
|
75
|
-
state: z
|
|
76
|
-
.enum(['visible', 'present', 'absent'])
|
|
77
|
-
.describe('"visible" = in viewport, "present" = in DOM, "absent" = not in DOM'),
|
|
78
|
-
})
|
|
79
|
-
.describe("Fires based on a DOM element's visibility state. " +
|
|
80
|
-
'Example: {"type": "anchor_visible", "anchorId": "#cta-button", "state": "visible"}');
|
|
81
|
-
export const EventOccurredConditionZ = z
|
|
82
|
-
.object({
|
|
83
|
-
type: z.literal('event_occurred'),
|
|
84
|
-
eventName: z.string().describe('Event name (e.g. "ui.click", "$pageview")'),
|
|
85
|
-
withinMs: z.number().optional().describe('Time window in ms. Omit = any time this session.'),
|
|
86
|
-
})
|
|
87
|
-
.describe('Fires when a specific event has occurred during this session. ' +
|
|
88
|
-
'Example: {"type": "event_occurred", "eventName": "ui.click", "withinMs": 5000}');
|
|
89
|
-
export const StateEqualsConditionZ = z
|
|
90
|
-
.object({
|
|
91
|
-
type: z.literal('state_equals'),
|
|
92
|
-
key: z
|
|
93
|
-
.string()
|
|
94
|
-
.describe('Key in the SDK persistent state store (localStorage). Only valid for keys the host app explicitly sets via syntro.state.set().'),
|
|
95
|
-
value: z.unknown().describe('Expected value to match against'),
|
|
96
|
-
})
|
|
97
|
-
.describe('Checks the SDK persistent state store (localStorage). ONLY for host-app state set via syntro.state.set() — ' +
|
|
98
|
-
'NOT for user attributes like region, device, or UTM params (those are handled by segment targeting). ' +
|
|
99
|
-
'Do NOT use this for targeting. If you do not know the valid state keys, do not use this condition type.');
|
|
100
|
-
export const ViewportConditionZ = z
|
|
101
|
-
.object({
|
|
102
|
-
type: z.literal('viewport'),
|
|
103
|
-
minWidth: z.number().optional().describe('Minimum viewport width in pixels'),
|
|
104
|
-
maxWidth: z.number().optional().describe('Maximum viewport width in pixels'),
|
|
105
|
-
minHeight: z.number().optional().describe('Minimum viewport height in pixels'),
|
|
106
|
-
maxHeight: z.number().optional().describe('Maximum viewport height in pixels'),
|
|
107
|
-
})
|
|
108
|
-
.describe('Fires based on viewport (screen) size. Use for responsive behavior. ' +
|
|
109
|
-
'Example: {"type": "viewport", "minWidth": 768} — fires on tablet and larger.');
|
|
110
|
-
export const SessionMetricConditionZ = z
|
|
111
|
-
.object({
|
|
112
|
-
type: z.literal('session_metric'),
|
|
113
|
-
key: SessionMetricKeyZ,
|
|
114
|
-
operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),
|
|
115
|
-
threshold: z.number().describe('Numeric threshold to compare against'),
|
|
116
|
-
})
|
|
117
|
-
.describe('Fires when a session metric crosses a threshold. Valid keys: "time_on_page" (seconds), ' +
|
|
118
|
-
'"page_views" (count), "scroll_depth" (0-100). ' +
|
|
119
|
-
'Example: {"type": "session_metric", "key": "time_on_page", "operator": "gte", "threshold": 30}');
|
|
120
|
-
export const DismissedConditionZ = z
|
|
121
|
-
.object({
|
|
122
|
-
type: z.literal('dismissed'),
|
|
123
|
-
key: z.string().describe('Dismissal key (usually a tile or action ID)'),
|
|
124
|
-
inverted: z
|
|
125
|
-
.boolean()
|
|
126
|
-
.optional()
|
|
127
|
-
.describe('When true, fires if NOT dismissed (default behavior)'),
|
|
128
|
-
})
|
|
129
|
-
.describe('Checks if an item has been dismissed by the user. Use with inverted: true to show only if not dismissed.');
|
|
130
|
-
export const CooldownActiveConditionZ = z
|
|
131
|
-
.object({
|
|
132
|
-
type: z.literal('cooldown_active'),
|
|
133
|
-
key: z.string().describe('Cooldown key'),
|
|
134
|
-
inverted: z.boolean().optional().describe('When true, fires if cooldown is NOT active'),
|
|
135
|
-
})
|
|
136
|
-
.describe('Checks if a cooldown timer is currently active. Use to prevent showing the same intervention too frequently.');
|
|
137
|
-
export const FrequencyLimitConditionZ = z
|
|
138
|
-
.object({
|
|
139
|
-
type: z.literal('frequency_limit'),
|
|
140
|
-
key: z.string().describe('Frequency counter key'),
|
|
141
|
-
limit: z.number().describe('Maximum allowed count'),
|
|
142
|
-
inverted: z.boolean().optional().describe('When true, fires if limit NOT reached'),
|
|
143
|
-
})
|
|
144
|
-
.describe('Checks if a frequency limit has been reached. Use to cap how many times an action fires per session.');
|
|
145
|
-
export const MatchOpZ = z
|
|
146
|
-
.object({
|
|
147
|
-
equals: z.union([z.string(), z.number(), z.boolean()]).optional(),
|
|
148
|
-
contains: z.string().optional(),
|
|
149
|
-
})
|
|
150
|
-
.describe('Match operator for counter filters. Exactly one of equals or contains must be specified.');
|
|
151
|
-
export const CounterDefZ = z
|
|
152
|
-
.object({
|
|
153
|
-
events: z
|
|
154
|
-
.array(CountableEventZ)
|
|
155
|
-
.min(1)
|
|
156
|
-
.describe('Event names to count. Use values from the countable events enum.'),
|
|
157
|
-
match: z
|
|
158
|
-
.record(z.string(), MatchOpZ)
|
|
159
|
-
.optional()
|
|
160
|
-
.describe('Property filters. Keys are event prop names or element-chain fields ' +
|
|
161
|
-
'(tag_name, $el_text, attr__*). All entries AND together.'),
|
|
162
|
-
})
|
|
163
|
-
.describe('Defines what events to count. Registered as an accumulator predicate at config-load time.');
|
|
164
|
-
export const EventCountConditionZ = z
|
|
165
|
-
.object({
|
|
166
|
-
type: z.literal('event_count'),
|
|
167
|
-
key: z.string().describe('Unique key for this counter (used for accumulator registration)'),
|
|
168
|
-
operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),
|
|
169
|
-
count: z.number().int().min(0).describe('Target count threshold'),
|
|
170
|
-
withinMs: z
|
|
171
|
-
.number()
|
|
172
|
-
.positive()
|
|
173
|
-
.optional()
|
|
174
|
-
.describe('Time window in ms. Omit = count across entire session.'),
|
|
175
|
-
counter: CounterDefZ.optional().describe('Inline counter definition. Defines what events to count.'),
|
|
176
|
-
})
|
|
177
|
-
.describe('Fires when accumulated event count crosses a threshold. Most powerful trigger type. ' +
|
|
178
|
-
'Example: {"type": "event_count", "key": "pricing-clicks", "operator": "gte", "count": 3, ' +
|
|
179
|
-
'"counter": {"events": ["ui.click"], "match": {"attr__data-cta": {"contains": "pricing"}}}}');
|
|
180
|
-
export const ConditionZ = z.discriminatedUnion('type', [
|
|
181
|
-
PageUrlConditionZ,
|
|
182
|
-
RouteConditionZ,
|
|
183
|
-
AnchorVisibleConditionZ,
|
|
184
|
-
EventOccurredConditionZ,
|
|
185
|
-
StateEqualsConditionZ,
|
|
186
|
-
ViewportConditionZ,
|
|
187
|
-
SessionMetricConditionZ,
|
|
188
|
-
DismissedConditionZ,
|
|
189
|
-
CooldownActiveConditionZ,
|
|
190
|
-
FrequencyLimitConditionZ,
|
|
191
|
-
EventCountConditionZ,
|
|
192
|
-
]);
|
|
193
|
-
// =============================================================================
|
|
194
|
-
// STRATEGY SCHEMAS
|
|
195
|
-
// =============================================================================
|
|
196
|
-
export const RuleZ = z
|
|
197
|
-
.object({
|
|
198
|
-
conditions: z
|
|
199
|
-
.array(ConditionZ)
|
|
200
|
-
.describe('Array of conditions — ALL must match (AND logic) for this rule to fire.'),
|
|
201
|
-
value: z
|
|
202
|
-
.unknown()
|
|
203
|
-
.describe('Value returned when all conditions match. For triggerWhen: true = fire the action.'),
|
|
204
|
-
})
|
|
205
|
-
.describe('A single rule. ALL conditions must match (AND logic). Rules in a strategy are evaluated ' +
|
|
206
|
-
'top-to-bottom — first rule where all conditions match wins and returns its value.');
|
|
207
|
-
export const RuleStrategyZ = z
|
|
208
|
-
.object({
|
|
209
|
-
type: z.literal('rules'),
|
|
210
|
-
rules: z
|
|
211
|
-
.array(RuleZ)
|
|
212
|
-
.describe('Ordered list of rules. Evaluated top-to-bottom — first match wins.'),
|
|
213
|
-
default: z
|
|
214
|
-
.unknown()
|
|
215
|
-
.describe('Fallback value when no rule matches. For triggerWhen: false = do not fire by default.'),
|
|
216
|
-
})
|
|
217
|
-
.describe('Rule-based strategy. Evaluates rules top-to-bottom. First rule where ALL conditions match ' +
|
|
218
|
-
'returns its value. If no rule matches, returns default. ' +
|
|
219
|
-
'For triggerWhen: set value=true on matching rules, default=false.');
|
|
220
|
-
export const ScoreStrategyZ = z
|
|
221
|
-
.object({
|
|
222
|
-
type: z.literal('score'),
|
|
223
|
-
field: z.string(),
|
|
224
|
-
threshold: z.number(),
|
|
225
|
-
above: z.unknown(),
|
|
226
|
-
below: z.unknown(),
|
|
227
|
-
})
|
|
228
|
-
.describe('Score-based strategy. Compares a field value against a threshold.');
|
|
229
|
-
export const ModelStrategyZ = z
|
|
230
|
-
.object({
|
|
231
|
-
type: z.literal('model'),
|
|
232
|
-
modelId: z.string(),
|
|
233
|
-
inputs: z.array(z.string()),
|
|
234
|
-
outputMapping: z.record(z.string(), z.unknown()),
|
|
235
|
-
default: z.unknown(),
|
|
236
|
-
})
|
|
237
|
-
.describe('ML model strategy. Sends inputs to a model and maps outputs.');
|
|
238
|
-
export const ExternalStrategyZ = z
|
|
239
|
-
.object({
|
|
240
|
-
type: z.literal('external'),
|
|
241
|
-
endpoint: z.string(),
|
|
242
|
-
method: z.enum(['GET', 'POST']).optional(),
|
|
243
|
-
default: z.unknown(),
|
|
244
|
-
timeoutMs: z.number().optional(),
|
|
245
|
-
})
|
|
246
|
-
.describe('External API strategy. Calls an endpoint to determine the value.');
|
|
247
|
-
export const DecisionStrategyZ = z.discriminatedUnion('type', [
|
|
248
|
-
RuleStrategyZ,
|
|
249
|
-
ScoreStrategyZ,
|
|
250
|
-
ModelStrategyZ,
|
|
251
|
-
ExternalStrategyZ,
|
|
252
|
-
]);
|
|
253
|
-
/** Canonical Zod schema for the optional triggerWhen field on actions and adaptive items. */
|
|
254
|
-
export const TriggerWhenZ = DecisionStrategyZ.nullable().optional();
|
|
255
|
-
// =============================================================================
|
|
256
|
-
// TRIGGER DOCUMENTATION — examples and match field docs
|
|
257
|
-
// Exported as constants so the schema generator can inject them into the
|
|
258
|
-
// JSON schema. The Python prompt builder reads them from the schema.
|
|
259
|
-
// =============================================================================
|
|
260
|
-
/** Complete triggerWhen examples showing the full rules wrapper structure. */
|
|
261
|
-
export const TRIGGER_EXAMPLES = [
|
|
262
|
-
{
|
|
263
|
-
name: 'Click count on a specific element',
|
|
264
|
-
description: 'Fire when user clicks an element with data-id="hero-cta" 2+ times',
|
|
265
|
-
triggerWhen: {
|
|
266
|
-
type: 'rules',
|
|
267
|
-
rules: [
|
|
268
|
-
{
|
|
269
|
-
conditions: [
|
|
270
|
-
{
|
|
271
|
-
type: 'event_count',
|
|
272
|
-
key: 'cta-clicks',
|
|
273
|
-
operator: 'gte',
|
|
274
|
-
count: 2,
|
|
275
|
-
counter: {
|
|
276
|
-
events: ['ui.click'],
|
|
277
|
-
match: { 'attr__data-id': { equals: 'hero-cta' } },
|
|
278
|
-
},
|
|
279
|
-
},
|
|
280
|
-
],
|
|
281
|
-
value: true,
|
|
282
|
-
},
|
|
283
|
-
],
|
|
284
|
-
default: false,
|
|
285
|
-
},
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
name: 'Time on page threshold',
|
|
289
|
-
description: 'Fire after user spends 30+ seconds on the page',
|
|
290
|
-
triggerWhen: {
|
|
291
|
-
type: 'rules',
|
|
292
|
-
rules: [
|
|
293
|
-
{
|
|
294
|
-
conditions: [
|
|
295
|
-
{
|
|
296
|
-
type: 'session_metric',
|
|
297
|
-
key: 'time_on_page',
|
|
298
|
-
operator: 'gte',
|
|
299
|
-
threshold: 30,
|
|
300
|
-
},
|
|
301
|
-
],
|
|
302
|
-
value: true,
|
|
303
|
-
},
|
|
304
|
-
],
|
|
305
|
-
default: false,
|
|
306
|
-
},
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
name: 'Element visible in viewport',
|
|
310
|
-
description: 'Fire when a DOM element becomes visible',
|
|
311
|
-
triggerWhen: {
|
|
312
|
-
type: 'rules',
|
|
313
|
-
rules: [
|
|
314
|
-
{
|
|
315
|
-
conditions: [
|
|
316
|
-
{
|
|
317
|
-
type: 'anchor_visible',
|
|
318
|
-
anchorId: '#pricing-section',
|
|
319
|
-
state: 'visible',
|
|
320
|
-
},
|
|
321
|
-
],
|
|
322
|
-
value: true,
|
|
323
|
-
},
|
|
324
|
-
],
|
|
325
|
-
default: false,
|
|
326
|
-
},
|
|
327
|
-
},
|
|
328
|
-
{
|
|
329
|
-
name: 'No trigger (fire immediately)',
|
|
330
|
-
description: 'Action fires as soon as the segment matches — no in-session condition needed',
|
|
331
|
-
triggerWhen: null,
|
|
332
|
-
},
|
|
333
|
-
];
|
|
334
|
-
/** Documentation for counter.match field keys. */
|
|
335
|
-
export const MATCH_FIELD_DOCS = {
|
|
336
|
-
tag_name: 'HTML tag name (e.g. "button", "a", "input")',
|
|
337
|
-
$el_text: 'Visible text content of the element',
|
|
338
|
-
'attr__*': 'HTML attribute prefixed with attr__. Example: attr__data-id matches the data-id attribute, ' +
|
|
339
|
-
'attr__class matches the class attribute, attr__href matches the href attribute.',
|
|
340
|
-
};
|
|
341
|
-
// =============================================================================
|
|
342
|
-
// EVENT SCOPE SCHEMA
|
|
343
|
-
// =============================================================================
|
|
344
|
-
/** Scopes a widget to specific events/URLs. */
|
|
345
|
-
export const EventScopeZ = z.object({
|
|
346
|
-
events: z.array(z.string()),
|
|
347
|
-
urlContains: z.string().optional(),
|
|
348
|
-
props: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),
|
|
349
|
-
});
|
|
350
|
-
// =============================================================================
|
|
351
|
-
// NOTIFY SCHEMA
|
|
352
|
-
// =============================================================================
|
|
353
|
-
/** Toast notification config for triggerWhen transitions. */
|
|
354
|
-
export const NotifyZ = z
|
|
355
|
-
.object({
|
|
356
|
-
title: z.string().optional(),
|
|
357
|
-
body: z.string().optional(),
|
|
358
|
-
icon: z.string().optional(),
|
|
359
|
-
})
|
|
360
|
-
.nullable()
|
|
361
|
-
.optional();
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@syntrologie/sdk-contracts",
|
|
3
|
-
"version": "0.0.0-semantically-released",
|
|
4
|
-
"description": "Shared TypeScript contracts between runtime-sdk and adaptive packages",
|
|
5
|
-
"license": "Proprietary",
|
|
6
|
-
"private": true,
|
|
7
|
-
"type": "module",
|
|
8
|
-
"main": "dist/index.js",
|
|
9
|
-
"types": "dist/index.d.ts",
|
|
10
|
-
"exports": {
|
|
11
|
-
".": {
|
|
12
|
-
"types": "./dist/index.d.ts",
|
|
13
|
-
"import": "./dist/index.js"
|
|
14
|
-
},
|
|
15
|
-
"./schemas": {
|
|
16
|
-
"types": "./dist/schemas.d.ts",
|
|
17
|
-
"import": "./dist/schemas.js"
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
"files": [
|
|
21
|
-
"dist"
|
|
22
|
-
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "tsc",
|
|
25
|
-
"typecheck": "tsc --noEmit"
|
|
26
|
-
},
|
|
27
|
-
"dependencies": {
|
|
28
|
-
"zod": "3.25.76"
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"typescript": "5.9.3"
|
|
32
|
-
}
|
|
33
|
-
}
|