@shop-on/theme-contract 0.5.0 → 0.7.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 (43) hide show
  1. package/dist/ai-files.d.ts +18 -0
  2. package/dist/ai-files.js +47 -0
  3. package/dist/block-allowlist.d.ts +27 -0
  4. package/dist/block-allowlist.js +21 -0
  5. package/dist/closest-scope.d.ts +51 -0
  6. package/dist/closest-scope.js +66 -0
  7. package/dist/editor-tools/apply.d.ts +85 -0
  8. package/dist/editor-tools/apply.js +544 -0
  9. package/dist/editor-tools/args.d.ts +153 -0
  10. package/dist/editor-tools/args.js +145 -0
  11. package/dist/editor-tools/coerce.d.ts +43 -0
  12. package/dist/editor-tools/coerce.js +200 -0
  13. package/dist/editor-tools/digest.d.ts +75 -0
  14. package/dist/editor-tools/digest.js +99 -0
  15. package/dist/editor-tools/index.d.ts +21 -0
  16. package/dist/editor-tools/index.js +24 -0
  17. package/dist/editor-tools/recipes.d.ts +122 -0
  18. package/dist/editor-tools/recipes.js +192 -0
  19. package/dist/fonts.d.ts +9 -0
  20. package/dist/fonts.js +11 -0
  21. package/dist/google-fonts.generated.d.ts +7 -0
  22. package/dist/google-fonts.generated.js +753 -0
  23. package/dist/index.d.ts +14 -5
  24. package/dist/index.js +14 -5
  25. package/dist/link-url.d.ts +9 -0
  26. package/dist/link-url.js +33 -0
  27. package/dist/metafield-binding.d.ts +89 -9
  28. package/dist/metafield-binding.js +254 -43
  29. package/dist/ops.d.ts +126 -0
  30. package/dist/ops.js +453 -0
  31. package/dist/richtext.d.ts +23 -0
  32. package/dist/richtext.js +115 -1
  33. package/dist/schemas.d.ts +325 -0
  34. package/dist/schemas.js +57 -7
  35. package/dist/section-scope.d.ts +17 -0
  36. package/dist/section-scope.js +22 -0
  37. package/dist/store-path.d.ts +9 -0
  38. package/dist/store-path.js +13 -1
  39. package/dist/template-limits.d.ts +34 -0
  40. package/dist/template-limits.js +71 -0
  41. package/dist/video-url.d.ts +10 -0
  42. package/dist/video-url.js +36 -0
  43. package/package.json +8 -1
package/dist/schemas.d.ts CHANGED
@@ -19,6 +19,30 @@ export declare const SettingBinding: z.ZodDiscriminatedUnion<[z.ZodObject<{
19
19
  source: z.ZodLiteral<"collection_attribute">;
20
20
  attribute: z.ZodString;
21
21
  settingType: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strip>, z.ZodObject<{
23
+ source: z.ZodLiteral<"collection_metafield">;
24
+ namespace: z.ZodString;
25
+ key: z.ZodString;
26
+ field: z.ZodOptional<z.ZodString>;
27
+ settingType: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strip>, z.ZodObject<{
29
+ source: z.ZodLiteral<"page_metafield">;
30
+ namespace: z.ZodString;
31
+ key: z.ZodString;
32
+ field: z.ZodOptional<z.ZodString>;
33
+ settingType: z.ZodOptional<z.ZodString>;
34
+ }, z.core.$strip>, z.ZodObject<{
35
+ source: z.ZodLiteral<"blog_metafield">;
36
+ namespace: z.ZodString;
37
+ key: z.ZodString;
38
+ field: z.ZodOptional<z.ZodString>;
39
+ settingType: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>, z.ZodObject<{
41
+ source: z.ZodLiteral<"article_metafield">;
42
+ namespace: z.ZodString;
43
+ key: z.ZodString;
44
+ field: z.ZodOptional<z.ZodString>;
45
+ settingType: z.ZodOptional<z.ZodString>;
22
46
  }, z.core.$strip>, z.ZodObject<{
23
47
  source: z.ZodLiteral<"page_attribute">;
24
48
  attribute: z.ZodString;
@@ -28,8 +52,55 @@ export declare const SettingBinding: z.ZodDiscriminatedUnion<[z.ZodObject<{
28
52
  }, z.core.$strip>, z.ZodObject<{
29
53
  source: z.ZodLiteral<"article_attribute">;
30
54
  attribute: z.ZodString;
55
+ }, z.core.$strip>, z.ZodObject<{
56
+ source: z.ZodLiteral<"closest_product_metafield">;
57
+ namespace: z.ZodString;
58
+ key: z.ZodString;
59
+ settingType: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strip>, z.ZodObject<{
61
+ source: z.ZodLiteral<"closest_product_attribute">;
62
+ attribute: z.ZodString;
63
+ }, z.core.$strip>, z.ZodObject<{
64
+ source: z.ZodLiteral<"closest_collection_attribute">;
65
+ attribute: z.ZodString;
66
+ settingType: z.ZodOptional<z.ZodString>;
67
+ }, z.core.$strip>, z.ZodObject<{
68
+ source: z.ZodLiteral<"closest_page_attribute">;
69
+ attribute: z.ZodString;
70
+ }, z.core.$strip>, z.ZodObject<{
71
+ source: z.ZodLiteral<"closest_blog_attribute">;
72
+ attribute: z.ZodString;
73
+ }, z.core.$strip>, z.ZodObject<{
74
+ source: z.ZodLiteral<"closest_article_attribute">;
75
+ attribute: z.ZodString;
31
76
  }, z.core.$strip>], "source">;
32
77
  export type SettingBinding = z.infer<typeof SettingBinding>;
78
+ export declare const ClosestResource: z.ZodEnum<{
79
+ article: "article";
80
+ blog: "blog";
81
+ collection: "collection";
82
+ page: "page";
83
+ product: "product";
84
+ }>;
85
+ export type ClosestResource = z.infer<typeof ClosestResource>;
86
+ export declare const CLOSEST_RESOURCES: ("article" | "blog" | "collection" | "page" | "product")[];
87
+ export declare const ProviderDecl: z.ZodObject<{
88
+ from: z.ZodString;
89
+ each: z.ZodArray<z.ZodString>;
90
+ }, z.core.$strip>;
91
+ export declare const THEME_FED = "$theme";
92
+ export type ProviderDecl = z.infer<typeof ProviderDecl>;
93
+ export declare const Provides: z.ZodRecord<z.ZodEnum<{
94
+ article: "article";
95
+ blog: "blog";
96
+ collection: "collection";
97
+ page: "page";
98
+ product: "product";
99
+ }> & z.core.$partial, z.ZodObject<{
100
+ from: z.ZodString;
101
+ each: z.ZodArray<z.ZodString>;
102
+ }, z.core.$strip>>;
103
+ export type Provides = z.infer<typeof Provides>;
33
104
  export declare const SettingBindings: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
34
105
  source: z.ZodLiteral<"product_metafield">;
35
106
  namespace: z.ZodString;
@@ -48,6 +119,30 @@ export declare const SettingBindings: z.ZodRecord<z.ZodString, z.ZodDiscriminate
48
119
  source: z.ZodLiteral<"collection_attribute">;
49
120
  attribute: z.ZodString;
50
121
  settingType: z.ZodOptional<z.ZodString>;
122
+ }, z.core.$strip>, z.ZodObject<{
123
+ source: z.ZodLiteral<"collection_metafield">;
124
+ namespace: z.ZodString;
125
+ key: z.ZodString;
126
+ field: z.ZodOptional<z.ZodString>;
127
+ settingType: z.ZodOptional<z.ZodString>;
128
+ }, z.core.$strip>, z.ZodObject<{
129
+ source: z.ZodLiteral<"page_metafield">;
130
+ namespace: z.ZodString;
131
+ key: z.ZodString;
132
+ field: z.ZodOptional<z.ZodString>;
133
+ settingType: z.ZodOptional<z.ZodString>;
134
+ }, z.core.$strip>, z.ZodObject<{
135
+ source: z.ZodLiteral<"blog_metafield">;
136
+ namespace: z.ZodString;
137
+ key: z.ZodString;
138
+ field: z.ZodOptional<z.ZodString>;
139
+ settingType: z.ZodOptional<z.ZodString>;
140
+ }, z.core.$strip>, z.ZodObject<{
141
+ source: z.ZodLiteral<"article_metafield">;
142
+ namespace: z.ZodString;
143
+ key: z.ZodString;
144
+ field: z.ZodOptional<z.ZodString>;
145
+ settingType: z.ZodOptional<z.ZodString>;
51
146
  }, z.core.$strip>, z.ZodObject<{
52
147
  source: z.ZodLiteral<"page_attribute">;
53
148
  attribute: z.ZodString;
@@ -57,6 +152,27 @@ export declare const SettingBindings: z.ZodRecord<z.ZodString, z.ZodDiscriminate
57
152
  }, z.core.$strip>, z.ZodObject<{
58
153
  source: z.ZodLiteral<"article_attribute">;
59
154
  attribute: z.ZodString;
155
+ }, z.core.$strip>, z.ZodObject<{
156
+ source: z.ZodLiteral<"closest_product_metafield">;
157
+ namespace: z.ZodString;
158
+ key: z.ZodString;
159
+ settingType: z.ZodOptional<z.ZodString>;
160
+ }, z.core.$strip>, z.ZodObject<{
161
+ source: z.ZodLiteral<"closest_product_attribute">;
162
+ attribute: z.ZodString;
163
+ }, z.core.$strip>, z.ZodObject<{
164
+ source: z.ZodLiteral<"closest_collection_attribute">;
165
+ attribute: z.ZodString;
166
+ settingType: z.ZodOptional<z.ZodString>;
167
+ }, z.core.$strip>, z.ZodObject<{
168
+ source: z.ZodLiteral<"closest_page_attribute">;
169
+ attribute: z.ZodString;
170
+ }, z.core.$strip>, z.ZodObject<{
171
+ source: z.ZodLiteral<"closest_blog_attribute">;
172
+ attribute: z.ZodString;
173
+ }, z.core.$strip>, z.ZodObject<{
174
+ source: z.ZodLiteral<"closest_article_attribute">;
175
+ attribute: z.ZodString;
60
176
  }, z.core.$strip>], "source">>;
61
177
  export type SettingBindings = z.infer<typeof SettingBindings>;
62
178
  export declare const SchemaSetting: z.ZodObject<{
@@ -237,6 +353,16 @@ export declare const SectionSchema: z.ZodObject<{
237
353
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
238
354
  blocks: z.ZodOptional<z.ZodArray<z.ZodType<BlockDefinition, unknown, z.core.$ZodTypeInternals<BlockDefinition, unknown>>>>;
239
355
  }, z.core.$loose>>>;
356
+ provides: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
357
+ article: "article";
358
+ blog: "blog";
359
+ collection: "collection";
360
+ page: "page";
361
+ product: "product";
362
+ }> & z.core.$partial, z.ZodObject<{
363
+ from: z.ZodString;
364
+ each: z.ZodArray<z.ZodString>;
365
+ }, z.core.$strip>>>;
240
366
  }, z.core.$loose>;
241
367
  export type SectionSchema = z.infer<typeof SectionSchema>;
242
368
  export declare const BlockSchema: z.ZodObject<{
@@ -270,6 +396,16 @@ export declare const BlockSchema: z.ZodObject<{
270
396
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
271
397
  blocks: z.ZodOptional<z.ZodArray<z.ZodType<BlockDefinition, unknown, z.core.$ZodTypeInternals<BlockDefinition, unknown>>>>;
272
398
  }, z.core.$loose>>>;
399
+ provides: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
400
+ article: "article";
401
+ blog: "blog";
402
+ collection: "collection";
403
+ page: "page";
404
+ product: "product";
405
+ }> & z.core.$partial, z.ZodObject<{
406
+ from: z.ZodString;
407
+ each: z.ZodArray<z.ZodString>;
408
+ }, z.core.$strip>>>;
273
409
  }, z.core.$loose>;
274
410
  export type BlockSchema = z.infer<typeof BlockSchema>;
275
411
  export type TemplateBlock = {
@@ -287,7 +423,16 @@ export type TemplateBlock = {
287
423
  appId?: string;
288
424
  tag?: string;
289
425
  scriptUrl?: string;
426
+ closestSettings?: Record<string, Record<string, unknown>>;
290
427
  };
428
+ /** A `$theme` list's per-item values for a batch of its items: block-id path
429
+ * below the provider (the `each` id first, joined with `/`) → item handle →
430
+ * settings. `resolveListOverlays` (@shop-on/theme-loader) builds it,
431
+ * `withClosestOverlays` (@shop-on/theme-react) merges it into
432
+ * `closestSettings`. Strings only: a closest source binds string sinks alone
433
+ * (text, textarea, inline_richtext, richtext, color, url), which is also what
434
+ * lets a server fn return it. */
435
+ export type ClosestOverlays = Record<string, Record<string, Record<string, string>>>;
291
436
  export declare const TemplateBlock: z.ZodType<TemplateBlock>;
292
437
  export declare const TemplateSection: z.ZodObject<{
293
438
  type: z.ZodString;
@@ -310,6 +455,30 @@ export declare const TemplateSection: z.ZodObject<{
310
455
  source: z.ZodLiteral<"collection_attribute">;
311
456
  attribute: z.ZodString;
312
457
  settingType: z.ZodOptional<z.ZodString>;
458
+ }, z.core.$strip>, z.ZodObject<{
459
+ source: z.ZodLiteral<"collection_metafield">;
460
+ namespace: z.ZodString;
461
+ key: z.ZodString;
462
+ field: z.ZodOptional<z.ZodString>;
463
+ settingType: z.ZodOptional<z.ZodString>;
464
+ }, z.core.$strip>, z.ZodObject<{
465
+ source: z.ZodLiteral<"page_metafield">;
466
+ namespace: z.ZodString;
467
+ key: z.ZodString;
468
+ field: z.ZodOptional<z.ZodString>;
469
+ settingType: z.ZodOptional<z.ZodString>;
470
+ }, z.core.$strip>, z.ZodObject<{
471
+ source: z.ZodLiteral<"blog_metafield">;
472
+ namespace: z.ZodString;
473
+ key: z.ZodString;
474
+ field: z.ZodOptional<z.ZodString>;
475
+ settingType: z.ZodOptional<z.ZodString>;
476
+ }, z.core.$strip>, z.ZodObject<{
477
+ source: z.ZodLiteral<"article_metafield">;
478
+ namespace: z.ZodString;
479
+ key: z.ZodString;
480
+ field: z.ZodOptional<z.ZodString>;
481
+ settingType: z.ZodOptional<z.ZodString>;
313
482
  }, z.core.$strip>, z.ZodObject<{
314
483
  source: z.ZodLiteral<"page_attribute">;
315
484
  attribute: z.ZodString;
@@ -319,6 +488,27 @@ export declare const TemplateSection: z.ZodObject<{
319
488
  }, z.core.$strip>, z.ZodObject<{
320
489
  source: z.ZodLiteral<"article_attribute">;
321
490
  attribute: z.ZodString;
491
+ }, z.core.$strip>, z.ZodObject<{
492
+ source: z.ZodLiteral<"closest_product_metafield">;
493
+ namespace: z.ZodString;
494
+ key: z.ZodString;
495
+ settingType: z.ZodOptional<z.ZodString>;
496
+ }, z.core.$strip>, z.ZodObject<{
497
+ source: z.ZodLiteral<"closest_product_attribute">;
498
+ attribute: z.ZodString;
499
+ }, z.core.$strip>, z.ZodObject<{
500
+ source: z.ZodLiteral<"closest_collection_attribute">;
501
+ attribute: z.ZodString;
502
+ settingType: z.ZodOptional<z.ZodString>;
503
+ }, z.core.$strip>, z.ZodObject<{
504
+ source: z.ZodLiteral<"closest_page_attribute">;
505
+ attribute: z.ZodString;
506
+ }, z.core.$strip>, z.ZodObject<{
507
+ source: z.ZodLiteral<"closest_blog_attribute">;
508
+ attribute: z.ZodString;
509
+ }, z.core.$strip>, z.ZodObject<{
510
+ source: z.ZodLiteral<"closest_article_attribute">;
511
+ attribute: z.ZodString;
322
512
  }, z.core.$strip>], "source">>>;
323
513
  disabled: z.ZodOptional<z.ZodBoolean>;
324
514
  customName: z.ZodOptional<z.ZodString>;
@@ -356,6 +546,30 @@ export declare const Template: z.ZodObject<{
356
546
  source: z.ZodLiteral<"collection_attribute">;
357
547
  attribute: z.ZodString;
358
548
  settingType: z.ZodOptional<z.ZodString>;
549
+ }, z.core.$strip>, z.ZodObject<{
550
+ source: z.ZodLiteral<"collection_metafield">;
551
+ namespace: z.ZodString;
552
+ key: z.ZodString;
553
+ field: z.ZodOptional<z.ZodString>;
554
+ settingType: z.ZodOptional<z.ZodString>;
555
+ }, z.core.$strip>, z.ZodObject<{
556
+ source: z.ZodLiteral<"page_metafield">;
557
+ namespace: z.ZodString;
558
+ key: z.ZodString;
559
+ field: z.ZodOptional<z.ZodString>;
560
+ settingType: z.ZodOptional<z.ZodString>;
561
+ }, z.core.$strip>, z.ZodObject<{
562
+ source: z.ZodLiteral<"blog_metafield">;
563
+ namespace: z.ZodString;
564
+ key: z.ZodString;
565
+ field: z.ZodOptional<z.ZodString>;
566
+ settingType: z.ZodOptional<z.ZodString>;
567
+ }, z.core.$strip>, z.ZodObject<{
568
+ source: z.ZodLiteral<"article_metafield">;
569
+ namespace: z.ZodString;
570
+ key: z.ZodString;
571
+ field: z.ZodOptional<z.ZodString>;
572
+ settingType: z.ZodOptional<z.ZodString>;
359
573
  }, z.core.$strip>, z.ZodObject<{
360
574
  source: z.ZodLiteral<"page_attribute">;
361
575
  attribute: z.ZodString;
@@ -365,6 +579,27 @@ export declare const Template: z.ZodObject<{
365
579
  }, z.core.$strip>, z.ZodObject<{
366
580
  source: z.ZodLiteral<"article_attribute">;
367
581
  attribute: z.ZodString;
582
+ }, z.core.$strip>, z.ZodObject<{
583
+ source: z.ZodLiteral<"closest_product_metafield">;
584
+ namespace: z.ZodString;
585
+ key: z.ZodString;
586
+ settingType: z.ZodOptional<z.ZodString>;
587
+ }, z.core.$strip>, z.ZodObject<{
588
+ source: z.ZodLiteral<"closest_product_attribute">;
589
+ attribute: z.ZodString;
590
+ }, z.core.$strip>, z.ZodObject<{
591
+ source: z.ZodLiteral<"closest_collection_attribute">;
592
+ attribute: z.ZodString;
593
+ settingType: z.ZodOptional<z.ZodString>;
594
+ }, z.core.$strip>, z.ZodObject<{
595
+ source: z.ZodLiteral<"closest_page_attribute">;
596
+ attribute: z.ZodString;
597
+ }, z.core.$strip>, z.ZodObject<{
598
+ source: z.ZodLiteral<"closest_blog_attribute">;
599
+ attribute: z.ZodString;
600
+ }, z.core.$strip>, z.ZodObject<{
601
+ source: z.ZodLiteral<"closest_article_attribute">;
602
+ attribute: z.ZodString;
368
603
  }, z.core.$strip>], "source">>>;
369
604
  disabled: z.ZodOptional<z.ZodBoolean>;
370
605
  customName: z.ZodOptional<z.ZodString>;
@@ -401,6 +636,30 @@ export declare const Template: z.ZodObject<{
401
636
  source: z.ZodLiteral<"collection_attribute">;
402
637
  attribute: z.ZodString;
403
638
  settingType: z.ZodOptional<z.ZodString>;
639
+ }, z.core.$strip>, z.ZodObject<{
640
+ source: z.ZodLiteral<"collection_metafield">;
641
+ namespace: z.ZodString;
642
+ key: z.ZodString;
643
+ field: z.ZodOptional<z.ZodString>;
644
+ settingType: z.ZodOptional<z.ZodString>;
645
+ }, z.core.$strip>, z.ZodObject<{
646
+ source: z.ZodLiteral<"page_metafield">;
647
+ namespace: z.ZodString;
648
+ key: z.ZodString;
649
+ field: z.ZodOptional<z.ZodString>;
650
+ settingType: z.ZodOptional<z.ZodString>;
651
+ }, z.core.$strip>, z.ZodObject<{
652
+ source: z.ZodLiteral<"blog_metafield">;
653
+ namespace: z.ZodString;
654
+ key: z.ZodString;
655
+ field: z.ZodOptional<z.ZodString>;
656
+ settingType: z.ZodOptional<z.ZodString>;
657
+ }, z.core.$strip>, z.ZodObject<{
658
+ source: z.ZodLiteral<"article_metafield">;
659
+ namespace: z.ZodString;
660
+ key: z.ZodString;
661
+ field: z.ZodOptional<z.ZodString>;
662
+ settingType: z.ZodOptional<z.ZodString>;
404
663
  }, z.core.$strip>, z.ZodObject<{
405
664
  source: z.ZodLiteral<"page_attribute">;
406
665
  attribute: z.ZodString;
@@ -410,6 +669,27 @@ export declare const Template: z.ZodObject<{
410
669
  }, z.core.$strip>, z.ZodObject<{
411
670
  source: z.ZodLiteral<"article_attribute">;
412
671
  attribute: z.ZodString;
672
+ }, z.core.$strip>, z.ZodObject<{
673
+ source: z.ZodLiteral<"closest_product_metafield">;
674
+ namespace: z.ZodString;
675
+ key: z.ZodString;
676
+ settingType: z.ZodOptional<z.ZodString>;
677
+ }, z.core.$strip>, z.ZodObject<{
678
+ source: z.ZodLiteral<"closest_product_attribute">;
679
+ attribute: z.ZodString;
680
+ }, z.core.$strip>, z.ZodObject<{
681
+ source: z.ZodLiteral<"closest_collection_attribute">;
682
+ attribute: z.ZodString;
683
+ settingType: z.ZodOptional<z.ZodString>;
684
+ }, z.core.$strip>, z.ZodObject<{
685
+ source: z.ZodLiteral<"closest_page_attribute">;
686
+ attribute: z.ZodString;
687
+ }, z.core.$strip>, z.ZodObject<{
688
+ source: z.ZodLiteral<"closest_blog_attribute">;
689
+ attribute: z.ZodString;
690
+ }, z.core.$strip>, z.ZodObject<{
691
+ source: z.ZodLiteral<"closest_article_attribute">;
692
+ attribute: z.ZodString;
413
693
  }, z.core.$strip>], "source">>>;
414
694
  disabled: z.ZodOptional<z.ZodBoolean>;
415
695
  customName: z.ZodOptional<z.ZodString>;
@@ -449,6 +729,30 @@ export declare const SectionGroup: z.ZodObject<{
449
729
  source: z.ZodLiteral<"collection_attribute">;
450
730
  attribute: z.ZodString;
451
731
  settingType: z.ZodOptional<z.ZodString>;
732
+ }, z.core.$strip>, z.ZodObject<{
733
+ source: z.ZodLiteral<"collection_metafield">;
734
+ namespace: z.ZodString;
735
+ key: z.ZodString;
736
+ field: z.ZodOptional<z.ZodString>;
737
+ settingType: z.ZodOptional<z.ZodString>;
738
+ }, z.core.$strip>, z.ZodObject<{
739
+ source: z.ZodLiteral<"page_metafield">;
740
+ namespace: z.ZodString;
741
+ key: z.ZodString;
742
+ field: z.ZodOptional<z.ZodString>;
743
+ settingType: z.ZodOptional<z.ZodString>;
744
+ }, z.core.$strip>, z.ZodObject<{
745
+ source: z.ZodLiteral<"blog_metafield">;
746
+ namespace: z.ZodString;
747
+ key: z.ZodString;
748
+ field: z.ZodOptional<z.ZodString>;
749
+ settingType: z.ZodOptional<z.ZodString>;
750
+ }, z.core.$strip>, z.ZodObject<{
751
+ source: z.ZodLiteral<"article_metafield">;
752
+ namespace: z.ZodString;
753
+ key: z.ZodString;
754
+ field: z.ZodOptional<z.ZodString>;
755
+ settingType: z.ZodOptional<z.ZodString>;
452
756
  }, z.core.$strip>, z.ZodObject<{
453
757
  source: z.ZodLiteral<"page_attribute">;
454
758
  attribute: z.ZodString;
@@ -458,6 +762,27 @@ export declare const SectionGroup: z.ZodObject<{
458
762
  }, z.core.$strip>, z.ZodObject<{
459
763
  source: z.ZodLiteral<"article_attribute">;
460
764
  attribute: z.ZodString;
765
+ }, z.core.$strip>, z.ZodObject<{
766
+ source: z.ZodLiteral<"closest_product_metafield">;
767
+ namespace: z.ZodString;
768
+ key: z.ZodString;
769
+ settingType: z.ZodOptional<z.ZodString>;
770
+ }, z.core.$strip>, z.ZodObject<{
771
+ source: z.ZodLiteral<"closest_product_attribute">;
772
+ attribute: z.ZodString;
773
+ }, z.core.$strip>, z.ZodObject<{
774
+ source: z.ZodLiteral<"closest_collection_attribute">;
775
+ attribute: z.ZodString;
776
+ settingType: z.ZodOptional<z.ZodString>;
777
+ }, z.core.$strip>, z.ZodObject<{
778
+ source: z.ZodLiteral<"closest_page_attribute">;
779
+ attribute: z.ZodString;
780
+ }, z.core.$strip>, z.ZodObject<{
781
+ source: z.ZodLiteral<"closest_blog_attribute">;
782
+ attribute: z.ZodString;
783
+ }, z.core.$strip>, z.ZodObject<{
784
+ source: z.ZodLiteral<"closest_article_attribute">;
785
+ attribute: z.ZodString;
461
786
  }, z.core.$strip>], "source">>>;
462
787
  disabled: z.ZodOptional<z.ZodBoolean>;
463
788
  customName: z.ZodOptional<z.ZodString>;
package/dist/schemas.js CHANGED
@@ -1,13 +1,16 @@
1
1
  import { z } from "zod";
2
2
  //#region src/schemas.ts
3
- const SettingBinding = z.discriminatedUnion("source", [
4
- z.object({
5
- source: z.literal("product_metafield"),
3
+ function resourceMetafieldArm(source) {
4
+ return z.object({
5
+ source: z.literal(source),
6
6
  namespace: z.string(),
7
7
  key: z.string(),
8
8
  field: z.string().optional(),
9
9
  settingType: z.string().optional()
10
- }),
10
+ });
11
+ }
12
+ const SettingBinding = z.discriminatedUnion("source", [
13
+ resourceMetafieldArm("product_metafield"),
11
14
  z.object({
12
15
  source: z.literal("product_attribute"),
13
16
  attribute: z.string()
@@ -23,6 +26,10 @@ const SettingBinding = z.discriminatedUnion("source", [
23
26
  attribute: z.string(),
24
27
  settingType: z.string().optional()
25
28
  }),
29
+ resourceMetafieldArm("collection_metafield"),
30
+ resourceMetafieldArm("page_metafield"),
31
+ resourceMetafieldArm("blog_metafield"),
32
+ resourceMetafieldArm("article_metafield"),
26
33
  z.object({
27
34
  source: z.literal("page_attribute"),
28
35
  attribute: z.string()
@@ -34,8 +41,49 @@ const SettingBinding = z.discriminatedUnion("source", [
34
41
  z.object({
35
42
  source: z.literal("article_attribute"),
36
43
  attribute: z.string()
44
+ }),
45
+ z.object({
46
+ source: z.literal("closest_product_metafield"),
47
+ namespace: z.string(),
48
+ key: z.string(),
49
+ settingType: z.string().optional()
50
+ }),
51
+ z.object({
52
+ source: z.literal("closest_product_attribute"),
53
+ attribute: z.string()
54
+ }),
55
+ z.object({
56
+ source: z.literal("closest_collection_attribute"),
57
+ attribute: z.string(),
58
+ settingType: z.string().optional()
59
+ }),
60
+ z.object({
61
+ source: z.literal("closest_page_attribute"),
62
+ attribute: z.string()
63
+ }),
64
+ z.object({
65
+ source: z.literal("closest_blog_attribute"),
66
+ attribute: z.string()
67
+ }),
68
+ z.object({
69
+ source: z.literal("closest_article_attribute"),
70
+ attribute: z.string()
37
71
  })
38
72
  ]);
73
+ const ClosestResource = z.enum([
74
+ "product",
75
+ "collection",
76
+ "page",
77
+ "blog",
78
+ "article"
79
+ ]);
80
+ const CLOSEST_RESOURCES = ClosestResource.options;
81
+ const ProviderDecl = z.object({
82
+ from: z.string(),
83
+ each: z.array(z.string())
84
+ });
85
+ const THEME_FED = "$theme";
86
+ const Provides = z.partialRecord(ClosestResource, ProviderDecl);
39
87
  const SettingBindings = z.record(z.string(), SettingBinding);
40
88
  const SchemaSetting = z.object({
41
89
  type: z.string(),
@@ -96,7 +144,8 @@ const SectionSchema = z.object({
96
144
  settings: z.array(SchemaSetting).default([]),
97
145
  blocks: z.array(BlockDefinition).default([]),
98
146
  max_blocks: z.number().optional(),
99
- presets: z.array(SectionPreset).optional()
147
+ presets: z.array(SectionPreset).optional(),
148
+ provides: Provides.optional()
100
149
  }).passthrough();
101
150
  const BlockSchema = z.object({
102
151
  name: z.string().optional(),
@@ -104,7 +153,8 @@ const BlockSchema = z.object({
104
153
  blocks: z.array(BlockDefinition).optional(),
105
154
  max_blocks: z.number().optional(),
106
155
  previewable: z.boolean().optional(),
107
- presets: z.array(SectionPreset).optional()
156
+ presets: z.array(SectionPreset).optional(),
157
+ provides: Provides.optional()
108
158
  }).passthrough();
109
159
  const TemplateBlock = z.lazy(() => z.object({
110
160
  type: z.string(),
@@ -155,4 +205,4 @@ const SectionGroup = z.object({
155
205
  order: z.array(z.string()).default([])
156
206
  }).passthrough();
157
207
  //#endregion
158
- export { BlockDefinition, BlockSchema, SchemaSetting, SectionGroup, SectionPreset, SectionSchema, SettingBinding, SettingBindings, SettingsData, SettingsSchema, SettingsSchemaSection, Template, TemplateBlock, TemplateSection };
208
+ export { BlockDefinition, BlockSchema, CLOSEST_RESOURCES, ClosestResource, ProviderDecl, Provides, SchemaSetting, SectionGroup, SectionPreset, SectionSchema, SettingBinding, SettingBindings, SettingsData, SettingsSchema, SettingsSchemaSection, THEME_FED, Template, TemplateBlock, TemplateSection };
@@ -0,0 +1,17 @@
1
+ //#region src/section-scope.d.ts
2
+ type SectionPlacement = {
3
+ enabled_on?: {
4
+ groups?: string[];
5
+ templates?: string[];
6
+ };
7
+ disabled_on?: {
8
+ groups?: string[];
9
+ templates?: string[];
10
+ };
11
+ };
12
+ export declare function templateMatches(pattern: string, id: string): boolean;
13
+ export declare function isSectionEnabledOnTemplate(schema: SectionPlacement, templateId: string): boolean;
14
+ export declare function isSectionAddableInGroup(schema: SectionPlacement, groupType: string): boolean;
15
+ export declare function isSectionAllowedInGroup(schema: SectionPlacement, groupType: string): boolean;
16
+ //#endregion
17
+ export {};
@@ -0,0 +1,22 @@
1
+ //#region src/section-scope.ts
2
+ function templateMatches(pattern, id) {
3
+ return pattern.endsWith(".*") ? id.startsWith(pattern.slice(0, -1)) : pattern === id;
4
+ }
5
+ function isSectionEnabledOnTemplate(schema, templateId) {
6
+ if (schema.enabled_on?.groups?.length) return false;
7
+ if (schema.disabled_on?.templates?.includes("*")) return false;
8
+ if (schema.enabled_on?.templates?.length) return schema.enabled_on.templates.some((pattern) => templateMatches(pattern, templateId));
9
+ return true;
10
+ }
11
+ function isSectionAddableInGroup(schema, groupType) {
12
+ return schema.enabled_on?.groups?.includes(groupType) ?? false;
13
+ }
14
+ function isSectionAllowedInGroup(schema, groupType) {
15
+ const disabledGroups = schema.disabled_on?.groups;
16
+ if (disabledGroups?.includes("*") || disabledGroups?.includes(groupType)) return false;
17
+ if (schema.enabled_on?.groups?.length) return schema.enabled_on.groups.includes(groupType);
18
+ if (schema.enabled_on?.templates?.length) return false;
19
+ return true;
20
+ }
21
+ //#endregion
22
+ export { isSectionAddableInGroup, isSectionAllowedInGroup, isSectionEnabledOnTemplate, templateMatches };
@@ -1,4 +1,13 @@
1
1
  //#region src/store-path.d.ts
2
2
  export declare const STORE_SLUG_RE: RegExp;
3
3
  export declare const INSTALL_ID_RE: RegExp;
4
+ /** Hash field marking an orchestrator draft hash as seeded, so an install with
5
+ * zero templates or groups still has the key. Never a template id or group type. */
6
+ export declare const DRAFT_SEEDED_KEY = "__seeded";
7
+ /**
8
+ * True unless `id` is safe as one file name under a config dir (template,
9
+ * section group, layout). It is joined into a disk path, so `..` and
10
+ * separators must never pass.
11
+ */
12
+ export declare function invalidTemplateId(id: string | undefined): boolean;
4
13
  //#endregion
@@ -1,5 +1,17 @@
1
1
  //#region src/store-path.ts
2
2
  const STORE_SLUG_RE = /^[a-z0-9][a-z0-9-]{0,62}$/;
3
3
  const INSTALL_ID_RE = /^[a-z0-9_-]{4,32}$/;
4
+ /** Hash field marking an orchestrator draft hash as seeded, so an install with
5
+ * zero templates or groups still has the key. Never a template id or group type. */
6
+ const DRAFT_SEEDED_KEY = "__seeded";
7
+ const TEMPLATE_ID_RE = /^[A-Za-z0-9_.-]+$/;
8
+ /**
9
+ * True unless `id` is safe as one file name under a config dir (template,
10
+ * section group, layout). It is joined into a disk path, so `..` and
11
+ * separators must never pass.
12
+ */
13
+ function invalidTemplateId(id) {
14
+ return !id || !TEMPLATE_ID_RE.test(id) || /[/\\]|\.\./.test(id);
15
+ }
4
16
  //#endregion
5
- export { INSTALL_ID_RE, STORE_SLUG_RE };
17
+ export { DRAFT_SEEDED_KEY, INSTALL_ID_RE, STORE_SLUG_RE, invalidTemplateId };
@@ -0,0 +1,34 @@
1
+ //#region src/template-limits.d.ts
2
+ export declare const MAX_SECTIONS_PER_TEMPLATE = 25;
3
+ export declare const MAX_BLOCKS_PER_TEMPLATE = 1250;
4
+ export declare const MAX_BLOCK_NESTING_DEPTH = 8;
5
+ /** One template or section group, as compact JSON. The largest a shipped
6
+ * theme has is ~60 KB; a template at the block cap is ~250–500 KB. */
7
+ export declare const MAX_ENTRY_BYTES: number;
8
+ /** The blocks under `node` (a section or a block), at every depth. */
9
+ export declare function countNestedBlocks(node: unknown): number;
10
+ /** A template's or section group's sections (its `order`, as the editor
11
+ * counts them) and its blocks across every section. Both are
12
+ * `{sections, order}` documents. */
13
+ export declare function templateCounts(entry: unknown): {
14
+ sections: number;
15
+ blocks: number;
16
+ };
17
+ /** The deepest block level in a template or section group, as the editor
18
+ * counts it against `MAX_BLOCK_NESTING_DEPTH`: a block directly in a section
19
+ * is level 1, a section with no blocks is 0. */
20
+ export declare function maxBlockDepth(entry: unknown): number;
21
+ export declare function countBlocksInBlock(block: unknown): number;
22
+ /** 1-indexed depth of the deepest descendant within `block` (the block itself
23
+ * counts as 1). Prices a subtree about to be inserted against the nesting cap. */
24
+ export declare function maxDepthOfBlock(block: {
25
+ blocks?: Record<string, unknown>;
26
+ }): number;
27
+ export declare function maxDepthOfBlockSchema(blockType: string, blockSchemas: readonly {
28
+ type?: string;
29
+ blocks?: {
30
+ type: string;
31
+ static?: boolean;
32
+ }[];
33
+ }[], remaining?: number): number;
34
+ //#endregion