@molecule/api-mock-server 1.0.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.
Files changed (67) hide show
  1. package/LICENSE +115 -0
  2. package/README.md +853 -0
  3. package/dist/browser-guard.d.ts +2 -0
  4. package/dist/browser-guard.d.ts.map +1 -0
  5. package/dist/browser-guard.js +19 -0
  6. package/dist/browser-guard.js.map +1 -0
  7. package/dist/cli.d.ts +11 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +152 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/fixtures/app-fixtures.d.ts +54 -0
  12. package/dist/fixtures/app-fixtures.d.ts.map +1 -0
  13. package/dist/fixtures/app-fixtures.js +601 -0
  14. package/dist/fixtures/app-fixtures.js.map +1 -0
  15. package/dist/fixtures/index.d.ts +9 -0
  16. package/dist/fixtures/index.d.ts.map +1 -0
  17. package/dist/fixtures/index.js +9 -0
  18. package/dist/fixtures/index.js.map +1 -0
  19. package/dist/fixtures/seed.d.ts +74 -0
  20. package/dist/fixtures/seed.d.ts.map +1 -0
  21. package/dist/fixtures/seed.js +112 -0
  22. package/dist/fixtures/seed.js.map +1 -0
  23. package/dist/fixtures/semantic-generator.d.ts +20 -0
  24. package/dist/fixtures/semantic-generator.d.ts.map +1 -0
  25. package/dist/fixtures/semantic-generator.js +539 -0
  26. package/dist/fixtures/semantic-generator.js.map +1 -0
  27. package/dist/fixtures/zod-walker.d.ts +34 -0
  28. package/dist/fixtures/zod-walker.d.ts.map +1 -0
  29. package/dist/fixtures/zod-walker.js +183 -0
  30. package/dist/fixtures/zod-walker.js.map +1 -0
  31. package/dist/index.d.ts +78 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +78 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/scanner/index.d.ts +6 -0
  36. package/dist/scanner/index.d.ts.map +1 -0
  37. package/dist/scanner/index.js +6 -0
  38. package/dist/scanner/index.js.map +1 -0
  39. package/dist/scanner/scanner.d.ts +21 -0
  40. package/dist/scanner/scanner.d.ts.map +1 -0
  41. package/dist/scanner/scanner.js +463 -0
  42. package/dist/scanner/scanner.js.map +1 -0
  43. package/dist/server/index.d.ts +7 -0
  44. package/dist/server/index.d.ts.map +1 -0
  45. package/dist/server/index.js +7 -0
  46. package/dist/server/index.js.map +1 -0
  47. package/dist/server/middleware.d.ts +51 -0
  48. package/dist/server/middleware.d.ts.map +1 -0
  49. package/dist/server/middleware.js +124 -0
  50. package/dist/server/middleware.js.map +1 -0
  51. package/dist/server/server.d.ts +29 -0
  52. package/dist/server/server.d.ts.map +1 -0
  53. package/dist/server/server.js +314 -0
  54. package/dist/server/server.js.map +1 -0
  55. package/dist/states/index.d.ts +6 -0
  56. package/dist/states/index.d.ts.map +1 -0
  57. package/dist/states/index.js +6 -0
  58. package/dist/states/index.js.map +1 -0
  59. package/dist/states/states.d.ts +57 -0
  60. package/dist/states/states.d.ts.map +1 -0
  61. package/dist/states/states.js +89 -0
  62. package/dist/states/states.js.map +1 -0
  63. package/dist/types.d.ts +214 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +6 -0
  66. package/dist/types.js.map +1 -0
  67. package/package.json +66 -0
@@ -0,0 +1,539 @@
1
+ /**
2
+ * Field-name heuristic matching for generating realistic fixture values.
3
+ * Uses pattern matching on field names to select appropriate data generators.
4
+ */
5
+ import { futureDate, pick, randomDollars, randomInt, recentDate, seededUUID } from './seed.js';
6
+ /* ------------------------------------------------------------------ */
7
+ /* Realistic Data Pools */
8
+ /* ------------------------------------------------------------------ */
9
+ const FIRST_NAMES = [
10
+ 'Emma',
11
+ 'Liam',
12
+ 'Olivia',
13
+ 'Noah',
14
+ 'Ava',
15
+ 'James',
16
+ 'Sophia',
17
+ 'William',
18
+ 'Isabella',
19
+ 'Benjamin',
20
+ 'Mia',
21
+ 'Lucas',
22
+ 'Charlotte',
23
+ 'Henry',
24
+ 'Amelia',
25
+ 'Alexander',
26
+ 'Harper',
27
+ 'Daniel',
28
+ 'Evelyn',
29
+ 'Michael',
30
+ ];
31
+ const LAST_NAMES = [
32
+ 'Smith',
33
+ 'Johnson',
34
+ 'Williams',
35
+ 'Brown',
36
+ 'Jones',
37
+ 'Garcia',
38
+ 'Miller',
39
+ 'Davis',
40
+ 'Rodriguez',
41
+ 'Martinez',
42
+ 'Anderson',
43
+ 'Taylor',
44
+ 'Thomas',
45
+ 'Jackson',
46
+ 'White',
47
+ 'Harris',
48
+ 'Clark',
49
+ 'Lewis',
50
+ 'Robinson',
51
+ 'Walker',
52
+ ];
53
+ const EMAIL_DOMAINS = [
54
+ 'gmail.com',
55
+ 'outlook.com',
56
+ 'yahoo.com',
57
+ 'icloud.com',
58
+ 'protonmail.com',
59
+ ];
60
+ const MERCHANT_NAMES = [
61
+ 'Whole Foods Market',
62
+ 'Target',
63
+ 'Amazon.com',
64
+ 'Starbucks',
65
+ 'Costco',
66
+ 'Trader Joes',
67
+ 'Walmart Supercenter',
68
+ 'Shell Gas Station',
69
+ 'CVS Pharmacy',
70
+ 'Uber Eats',
71
+ 'Netflix',
72
+ 'Spotify Premium',
73
+ 'Apple Store',
74
+ 'Home Depot',
75
+ 'Chipotle Mexican Grill',
76
+ 'DoorDash',
77
+ 'Safeway',
78
+ 'Verizon Wireless',
79
+ 'Delta Air Lines',
80
+ 'Nordstrom',
81
+ 'REI Co-op',
82
+ 'Petco',
83
+ 'IKEA',
84
+ 'Sephora',
85
+ 'Nike.com',
86
+ 'Lyft',
87
+ 'AT&T',
88
+ 'United Airlines',
89
+ 'Panera Bread',
90
+ 'Best Buy',
91
+ ];
92
+ const CATEGORY_NAMES = [
93
+ 'Groceries',
94
+ 'Dining',
95
+ 'Transportation',
96
+ 'Entertainment',
97
+ 'Shopping',
98
+ 'Utilities',
99
+ 'Healthcare',
100
+ 'Education',
101
+ 'Travel',
102
+ 'Insurance',
103
+ 'Housing',
104
+ 'Personal Care',
105
+ 'Gifts',
106
+ 'Subscriptions',
107
+ 'Fitness',
108
+ ];
109
+ const INSTITUTION_NAMES = [
110
+ 'Chase',
111
+ 'Bank of America',
112
+ 'Wells Fargo',
113
+ 'Citibank',
114
+ 'US Bank',
115
+ 'Capital One',
116
+ 'TD Bank',
117
+ 'PNC Bank',
118
+ 'Ally Bank',
119
+ 'Marcus by Goldman Sachs',
120
+ 'American Express',
121
+ 'Discover',
122
+ 'Fidelity',
123
+ 'Vanguard',
124
+ 'Charles Schwab',
125
+ ];
126
+ const COLORS = [
127
+ '#3B82F6',
128
+ '#EF4444',
129
+ '#10B981',
130
+ '#F59E0B',
131
+ '#8B5CF6',
132
+ '#EC4899',
133
+ '#06B6D4',
134
+ '#F97316',
135
+ '#6366F1',
136
+ '#14B8A6',
137
+ ];
138
+ const ICONS = [
139
+ 'wallet',
140
+ 'credit-card',
141
+ 'bank',
142
+ 'piggy-bank',
143
+ 'chart-line',
144
+ 'receipt',
145
+ 'shopping-cart',
146
+ 'home',
147
+ 'car',
148
+ 'utensils',
149
+ 'film',
150
+ 'music',
151
+ 'book',
152
+ 'heart',
153
+ 'gift',
154
+ ];
155
+ const PRODUCT_ADJECTIVES = [
156
+ 'Premium',
157
+ 'Classic',
158
+ 'Ultra',
159
+ 'Pro',
160
+ 'Essential',
161
+ 'Deluxe',
162
+ 'Vintage',
163
+ 'Modern',
164
+ 'Artisan',
165
+ 'Organic',
166
+ 'Handcrafted',
167
+ ];
168
+ const PRODUCT_NOUNS = [
169
+ 'Headphones',
170
+ 'Backpack',
171
+ 'Watch',
172
+ 'Notebook',
173
+ 'Sneakers',
174
+ 'Sunglasses',
175
+ 'Wallet',
176
+ 'Mug',
177
+ 'Candle',
178
+ 'Blanket',
179
+ 'Jacket',
180
+ 'T-Shirt',
181
+ 'Hat',
182
+ 'Scarf',
183
+ 'Gloves',
184
+ ];
185
+ const REVIEW_TITLES = [
186
+ 'Absolutely love it!',
187
+ 'Great quality',
188
+ 'Worth every penny',
189
+ 'Exceeded expectations',
190
+ 'Good but not perfect',
191
+ 'Solid purchase',
192
+ 'Highly recommend',
193
+ 'Pretty decent',
194
+ 'Amazing craftsmanship',
195
+ 'Perfect gift',
196
+ ];
197
+ const STREET_NAMES = [
198
+ 'Main St',
199
+ 'Oak Ave',
200
+ 'Maple Dr',
201
+ 'Cedar Ln',
202
+ 'Elm St',
203
+ 'Park Blvd',
204
+ 'Washington Ave',
205
+ 'Lake Dr',
206
+ 'Hill Rd',
207
+ 'River Way',
208
+ ];
209
+ const CITIES = [
210
+ 'San Francisco',
211
+ 'New York',
212
+ 'Austin',
213
+ 'Denver',
214
+ 'Portland',
215
+ 'Seattle',
216
+ 'Chicago',
217
+ 'Boston',
218
+ 'Nashville',
219
+ 'Miami',
220
+ ];
221
+ const STATES = ['CA', 'NY', 'TX', 'CO', 'OR', 'WA', 'IL', 'MA', 'TN', 'FL'];
222
+ const COUNTRIES = ['US', 'CA', 'GB', 'DE', 'FR', 'AU', 'JP'];
223
+ const NOTES = [
224
+ 'Regular monthly payment',
225
+ 'One-time purchase',
226
+ 'Recurring subscription',
227
+ 'Reimbursable expense',
228
+ 'Shared with roommate',
229
+ 'Tax deductible',
230
+ 'Business expense',
231
+ 'Auto-pay enrolled',
232
+ '',
233
+ '',
234
+ ];
235
+ const SKUS = [
236
+ 'SKU-001',
237
+ 'SKU-002',
238
+ 'SKU-003',
239
+ 'SKU-004',
240
+ 'SKU-005',
241
+ 'SKU-006',
242
+ 'SKU-007',
243
+ 'SKU-008',
244
+ 'SKU-009',
245
+ 'SKU-010',
246
+ ];
247
+ const TAGS = [
248
+ 'new',
249
+ 'sale',
250
+ 'popular',
251
+ 'limited',
252
+ 'bestseller',
253
+ 'eco-friendly',
254
+ 'handmade',
255
+ 'premium',
256
+ 'organic',
257
+ 'vegan',
258
+ ];
259
+ /* ------------------------------------------------------------------ */
260
+ /* Semantic Rules */
261
+ /* ------------------------------------------------------------------ */
262
+ /**
263
+ * Default semantic rules that match field names to realistic generators.
264
+ * Rules are checked in order; the first match wins.
265
+ */
266
+ export const defaultSemanticRules = [
267
+ // IDs
268
+ {
269
+ pattern: /^id$|_id$/,
270
+ generate: (rng) => seededUUID(rng),
271
+ },
272
+ // Names
273
+ {
274
+ pattern: /^first_?name$/i,
275
+ generate: (rng) => pick(rng, FIRST_NAMES),
276
+ },
277
+ {
278
+ pattern: /^last_?name$/i,
279
+ generate: (rng) => pick(rng, LAST_NAMES),
280
+ },
281
+ {
282
+ pattern: /^name$|^display_?name$|^full_?name$/i,
283
+ generate: (rng) => `${pick(rng, FIRST_NAMES)} ${pick(rng, LAST_NAMES)}`,
284
+ },
285
+ {
286
+ pattern: /^title$/i,
287
+ generate: (rng) => pick(rng, REVIEW_TITLES),
288
+ },
289
+ // Email
290
+ {
291
+ pattern: /^email$|_email$/i,
292
+ generate: (rng) => {
293
+ const first = pick(rng, FIRST_NAMES).toLowerCase();
294
+ const last = pick(rng, LAST_NAMES).toLowerCase();
295
+ return `${first}.${last}@${pick(rng, EMAIL_DOMAINS)}`;
296
+ },
297
+ },
298
+ // Money
299
+ {
300
+ pattern: /^amount$|^price$|^balance$|^total$|^subtotal$/i,
301
+ generate: (rng) => randomDollars(rng, 1, 5000),
302
+ },
303
+ {
304
+ pattern: /^target_amount$|^initial_balance$/i,
305
+ generate: (rng) => randomDollars(rng, 1000, 50000),
306
+ },
307
+ {
308
+ pattern: /^current_amount$|^spent$/i,
309
+ generate: (rng) => randomDollars(rng, 0, 20000),
310
+ },
311
+ {
312
+ pattern: /^tax$/i,
313
+ generate: (rng) => randomDollars(rng, 0, 500),
314
+ },
315
+ // Currency
316
+ {
317
+ pattern: /^currency$/i,
318
+ generate: () => 'USD',
319
+ },
320
+ // Descriptions and text
321
+ {
322
+ pattern: /^description$/i,
323
+ generate: (rng) => pick(rng, MERCHANT_NAMES),
324
+ },
325
+ {
326
+ pattern: /^body$|^content$|^text$/i,
327
+ generate: (rng) => {
328
+ const sentences = [
329
+ 'Really impressed with the quality and attention to detail.',
330
+ 'Works exactly as described. Would buy again.',
331
+ 'Good value for the price. Shipping was fast too.',
332
+ 'This has become an essential part of my daily routine.',
333
+ 'The materials feel premium and durable.',
334
+ ];
335
+ return pick(rng, sentences);
336
+ },
337
+ },
338
+ {
339
+ pattern: /^notes$/i,
340
+ generate: (rng) => pick(rng, NOTES),
341
+ },
342
+ {
343
+ pattern: /^reason$/i,
344
+ generate: (rng) => pick(rng, ['adjustment', 'restock', 'return', 'initial', 'correction']),
345
+ },
346
+ // Categories
347
+ {
348
+ pattern: /^category$|^category_name$/i,
349
+ generate: (rng) => pick(rng, CATEGORY_NAMES),
350
+ },
351
+ // Institutions
352
+ {
353
+ pattern: /^institution$/i,
354
+ generate: (rng) => pick(rng, INSTITUTION_NAMES),
355
+ },
356
+ // Type/Status enums (handled by ZodEnum, but fallback)
357
+ {
358
+ pattern: /^type$/i,
359
+ generate: (rng) => pick(rng, ['checking', 'savings', 'credit', 'investment']),
360
+ },
361
+ {
362
+ pattern: /^status$/i,
363
+ generate: () => 'active',
364
+ },
365
+ // Dates
366
+ {
367
+ pattern: /^created_at$|^updated_at$|^date$/i,
368
+ generate: (rng) => recentDate(rng),
369
+ },
370
+ {
371
+ pattern: /^target_date$/i,
372
+ generate: (rng) => futureDate(rng, 365),
373
+ },
374
+ // Booleans
375
+ {
376
+ pattern: /^featured$|^is_active$|^enabled$/i,
377
+ generate: (rng) => rng() > 0.5,
378
+ },
379
+ // Dashboard / analytics metrics — money-flavoured aggregates first.
380
+ {
381
+ pattern: /(revenue|earnings|sales|spend|spent|cost|payout|mrr|arr)$/i,
382
+ generate: (rng) => randomDollars(rng, 500, 250000),
383
+ },
384
+ // Count-flavoured aggregates: totalPosts, totalViews, postCount, comments, etc.
385
+ {
386
+ pattern: /^(total|num|count)[A-Z]|(posts|views|comments|claps|likes|followers|following|members|users|orders|visitors|sessions|clicks|impressions|downloads|subscribers|projects|tasks|messages|notifications|reviews|bookings|files|items|count)$/i,
387
+ generate: (rng) => randomInt(rng, 12, 8400),
388
+ },
389
+ // Streak / day-window counters.
390
+ {
391
+ pattern: /(streak|streakdays|activedays|windowdays|days|weeks|months)$/i,
392
+ generate: (rng) => randomInt(rng, 1, 30),
393
+ },
394
+ // Word counts.
395
+ {
396
+ pattern: /words/i,
397
+ generate: (rng) => randomInt(rng, 800, 42000),
398
+ },
399
+ // Rates / percentages / growth.
400
+ {
401
+ pattern: /(rate|percent|percentage|ratio|growth|change|completion|progress|score)$/i,
402
+ generate: (rng) => randomInt(rng, 1, 98),
403
+ },
404
+ // Averages.
405
+ {
406
+ pattern: /^(avg|average|mean)|(_avg|average|readtime|duration)$/i,
407
+ generate: (rng) => randomInt(rng, 1, 60),
408
+ },
409
+ // Numbers
410
+ {
411
+ pattern: /^quantity$|^count$|^available$|^reserved$/i,
412
+ generate: (rng) => randomInt(rng, 0, 100),
413
+ },
414
+ {
415
+ pattern: /^rating$/i,
416
+ generate: (rng) => randomInt(rng, 3, 5),
417
+ },
418
+ {
419
+ pattern: /^month$/i,
420
+ generate: (rng) => randomInt(rng, 1, 12),
421
+ },
422
+ {
423
+ pattern: /^year$/i,
424
+ generate: () => 2026,
425
+ },
426
+ {
427
+ pattern: /^total_sold$/i,
428
+ generate: (rng) => randomInt(rng, 10, 500),
429
+ },
430
+ {
431
+ pattern: /^page$/i,
432
+ generate: () => 1,
433
+ },
434
+ {
435
+ pattern: /^limit$/i,
436
+ generate: () => 20,
437
+ },
438
+ // Colors and icons
439
+ {
440
+ pattern: /^color$/i,
441
+ generate: (rng) => pick(rng, COLORS),
442
+ },
443
+ {
444
+ pattern: /^icon$/i,
445
+ generate: (rng) => pick(rng, ICONS),
446
+ },
447
+ // SKU / codes
448
+ {
449
+ pattern: /^sku$/i,
450
+ generate: (rng) => pick(rng, SKUS),
451
+ },
452
+ // Tags
453
+ {
454
+ pattern: /^tags$/i,
455
+ generate: (rng) => {
456
+ const count = randomInt(rng, 1, 3);
457
+ const result = [];
458
+ for (let i = 0; i < count; i++) {
459
+ result.push(pick(rng, TAGS));
460
+ }
461
+ return result;
462
+ },
463
+ },
464
+ // Addresses
465
+ {
466
+ pattern: /^line1$|^address_line_?1$|^street$/i,
467
+ generate: (rng) => `${randomInt(rng, 100, 9999)} ${pick(rng, STREET_NAMES)}`,
468
+ },
469
+ {
470
+ pattern: /^line2$|^address_line_?2$/i,
471
+ generate: (rng) => (rng() > 0.6 ? `Apt ${randomInt(rng, 1, 400)}` : ''),
472
+ },
473
+ {
474
+ pattern: /^city$/i,
475
+ generate: (rng) => pick(rng, CITIES),
476
+ },
477
+ {
478
+ pattern: /^state$|^province$/i,
479
+ generate: (rng) => pick(rng, STATES),
480
+ },
481
+ {
482
+ pattern: /^postal_?code$|^zip_?code$|^zip$/i,
483
+ generate: (rng) => String(randomInt(rng, 10000, 99999)),
484
+ },
485
+ {
486
+ pattern: /^country$/i,
487
+ generate: (rng) => pick(rng, COUNTRIES),
488
+ },
489
+ // Images / URLs
490
+ {
491
+ pattern: /^image$|^image_url$|^avatar$|^thumbnail$/i,
492
+ generate: (_rng, i) => `https://picsum.photos/seed/${i}/400/400`,
493
+ },
494
+ {
495
+ pattern: /^images$|^thumbnails$/i,
496
+ generate: (_rng, i) => [`https://picsum.photos/seed/${i}/400/400`],
497
+ },
498
+ {
499
+ pattern: /^url$|^link$/i,
500
+ generate: (_rng, i) => `https://example.com/item/${i}`,
501
+ },
502
+ // Account number (masked)
503
+ {
504
+ pattern: /^account_number$/i,
505
+ generate: (rng) => `****${randomInt(rng, 1000, 9999)}`,
506
+ },
507
+ // Payment
508
+ {
509
+ pattern: /^payment_method_id$/i,
510
+ generate: (rng) => `pm_${seededUUID(rng).replace(/-/g, '').substring(0, 24)}`,
511
+ },
512
+ // Product names (for product-specific contexts)
513
+ {
514
+ pattern: /^product_name$/i,
515
+ generate: (rng) => `${pick(rng, PRODUCT_ADJECTIVES)} ${pick(rng, PRODUCT_NOUNS)}`,
516
+ },
517
+ // Variants
518
+ {
519
+ pattern: /^variants$/i,
520
+ generate: () => [],
521
+ },
522
+ ];
523
+ /**
524
+ * Apply semantic rules to generate a value for a given field name.
525
+ * @param fieldName - The name of the field to generate a value for
526
+ * @param rng - The seeded random function
527
+ * @param index - The item index (for cycling through pools)
528
+ * @param rules - Custom rules to apply (defaults to defaultSemanticRules)
529
+ * @returns The generated value, or undefined if no rule matched
530
+ */
531
+ export function applySemanticRules(fieldName, rng, index, rules = defaultSemanticRules) {
532
+ for (const rule of rules) {
533
+ if (rule.pattern.test(fieldName)) {
534
+ return rule.generate(rng, index);
535
+ }
536
+ }
537
+ return undefined;
538
+ }
539
+ //# sourceMappingURL=semantic-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-generator.js","sourceRoot":"","sources":["../../src/fixtures/semantic-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Walks ZodType._def trees to produce conformant fixture data.
3
+ * Handles the Zod 4 type system for deterministic data generation.
4
+ */
5
+ import type { FixtureConfig, ZodSchemaDefinition } from '../types.js';
6
+ /**
7
+ * Walk a serialized Zod schema definition and produce conformant data.
8
+ * @param schema - The serialized schema definition
9
+ * @param fieldName - The field name (for semantic heuristics)
10
+ * @param rng - The seeded random function
11
+ * @param index - The item index for list generation
12
+ * @returns A conformant value matching the schema
13
+ */
14
+ export declare function walkSchema(schema: ZodSchemaDefinition, fieldName: string, rng: () => number, index: number): unknown;
15
+ /**
16
+ * Generate a single conformant record from a schema, enriched with
17
+ * standard fields (id, created_at, updated_at).
18
+ * @param schema - The serialized Zod schema definition
19
+ * @param rng - The seeded random function
20
+ * @param index - The item index
21
+ * @returns A record with all schema fields plus standard fields
22
+ */
23
+ export declare function generateRecord(schema: ZodSchemaDefinition | undefined, rng: () => number, index: number): Record<string, unknown>;
24
+ /**
25
+ * Generate multiple records from a schema definition.
26
+ * @param schema - The serialized Zod schema definition
27
+ * @param count - Number of records to generate
28
+ * @param appType - App type for seed derivation
29
+ * @param path - Endpoint path for seed derivation
30
+ * @param config - Optional fixture configuration
31
+ * @returns An array of conformant records
32
+ */
33
+ export declare function generateRecords(schema: ZodSchemaDefinition | undefined, count: number, appType: string, path: string, config?: FixtureConfig): Record<string, unknown>[];
34
+ //# sourceMappingURL=zod-walker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-walker.d.ts","sourceRoot":"","sources":["../../src/fixtures/zod-walker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAIrE;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CA2DT;AAwGD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,GAAG,EAAE,MAAM,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAU3B"}