@ronin/compiler 0.7.1 → 0.8.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 (3) hide show
  1. package/dist/index.d.ts +206 -35
  2. package/dist/index.js +205 -107
  3. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ declare const ExpressionSchema: z.ZodObject<{
4
+ __RONIN_EXPRESSION: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ __RONIN_EXPRESSION: string;
7
+ }, {
8
+ __RONIN_EXPRESSION: string;
9
+ }>;
3
10
  declare const WithInstructionSchema: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodEffects<z.ZodObject<{
4
11
  being: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
5
12
  notBeing: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
@@ -1244,7 +1251,7 @@ declare const GetInstructionsSchema: z.ZodObject<Omit<{
1244
1251
  for?: string[] | Record<string, string> | undefined;
1245
1252
  }>;
1246
1253
  declare const QuerySchema: z.ZodObject<{
1247
- count: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodObject<Omit<{
1254
+ get: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodObject<Omit<{
1248
1255
  with: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodEffects<z.ZodObject<{
1249
1256
  being: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
1250
1257
  notBeing: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
@@ -2096,7 +2103,7 @@ declare const QuerySchema: z.ZodObject<{
2096
2103
  limitedTo?: number | undefined;
2097
2104
  for?: string[] | Record<string, string> | undefined;
2098
2105
  }>>>>;
2099
- create: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<z.objectUtil.extendShape<Omit<{
2106
+ set: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<z.objectUtil.extendShape<{
2100
2107
  with: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodEffects<z.ZodObject<{
2101
2108
  being: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
2102
2109
  notBeing: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
@@ -2915,10 +2922,11 @@ declare const QuerySchema: z.ZodObject<{
2915
2922
  after: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
2916
2923
  limitedTo: z.ZodOptional<z.ZodNumber>;
2917
2924
  for: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodRecord<z.ZodString, z.ZodString>]>>;
2918
- }, "with" | "for">, {
2925
+ }, {
2919
2926
  to: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>>, Record<string, any>, Record<string, any>>;
2920
2927
  }>, "strip", z.ZodTypeAny, {
2921
2928
  to: Record<string, any>;
2929
+ with?: Record<string, any> | Record<string, any>[] | undefined;
2922
2930
  including?: Record<string, any> | undefined;
2923
2931
  selecting?: string[] | undefined;
2924
2932
  orderedBy?: {
@@ -2932,8 +2940,10 @@ declare const QuerySchema: z.ZodObject<{
2932
2940
  before?: string | null | undefined;
2933
2941
  after?: string | null | undefined;
2934
2942
  limitedTo?: number | undefined;
2943
+ for?: string[] | Record<string, string> | undefined;
2935
2944
  }, {
2936
2945
  to: Record<string, any>;
2946
+ with?: Record<string, any> | Record<string, any>[] | undefined;
2937
2947
  including?: Record<string, any> | undefined;
2938
2948
  selecting?: string[] | undefined;
2939
2949
  orderedBy?: {
@@ -2947,8 +2957,9 @@ declare const QuerySchema: z.ZodObject<{
2947
2957
  before?: string | null | undefined;
2948
2958
  after?: string | null | undefined;
2949
2959
  limitedTo?: number | undefined;
2960
+ for?: string[] | Record<string, string> | undefined;
2950
2961
  }>>>;
2951
- drop: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<Omit<{
2962
+ add: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<z.objectUtil.extendShape<Omit<{
2952
2963
  with: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodEffects<z.ZodObject<{
2953
2964
  being: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
2954
2965
  notBeing: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
@@ -3767,8 +3778,10 @@ declare const QuerySchema: z.ZodObject<{
3767
3778
  after: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
3768
3779
  limitedTo: z.ZodOptional<z.ZodNumber>;
3769
3780
  for: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodRecord<z.ZodString, z.ZodString>]>>;
3770
- }, "to">, "strip", z.ZodTypeAny, {
3771
- with?: Record<string, any> | Record<string, any>[] | undefined;
3781
+ }, "with" | "for">, {
3782
+ to: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>>, Record<string, any>, Record<string, any>>;
3783
+ }>, "strip", z.ZodTypeAny, {
3784
+ to: Record<string, any>;
3772
3785
  including?: Record<string, any> | undefined;
3773
3786
  selecting?: string[] | undefined;
3774
3787
  orderedBy?: {
@@ -3782,9 +3795,8 @@ declare const QuerySchema: z.ZodObject<{
3782
3795
  before?: string | null | undefined;
3783
3796
  after?: string | null | undefined;
3784
3797
  limitedTo?: number | undefined;
3785
- for?: string[] | Record<string, string> | undefined;
3786
3798
  }, {
3787
- with?: Record<string, any> | Record<string, any>[] | undefined;
3799
+ to: Record<string, any>;
3788
3800
  including?: Record<string, any> | undefined;
3789
3801
  selecting?: string[] | undefined;
3790
3802
  orderedBy?: {
@@ -3798,9 +3810,8 @@ declare const QuerySchema: z.ZodObject<{
3798
3810
  before?: string | null | undefined;
3799
3811
  after?: string | null | undefined;
3800
3812
  limitedTo?: number | undefined;
3801
- for?: string[] | Record<string, string> | undefined;
3802
3813
  }>>>;
3803
- get: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodObject<Omit<{
3814
+ delete: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<Omit<{
3804
3815
  with: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodEffects<z.ZodObject<{
3805
3816
  being: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
3806
3817
  notBeing: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
@@ -4651,8 +4662,8 @@ declare const QuerySchema: z.ZodObject<{
4651
4662
  after?: string | null | undefined;
4652
4663
  limitedTo?: number | undefined;
4653
4664
  for?: string[] | Record<string, string> | undefined;
4654
- }>>>>;
4655
- set: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<z.objectUtil.extendShape<{
4665
+ }>>>;
4666
+ count: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodObject<Omit<{
4656
4667
  with: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodEffects<z.ZodObject<{
4657
4668
  being: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
4658
4669
  notBeing: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>, "many">]>>;
@@ -5471,10 +5482,7 @@ declare const QuerySchema: z.ZodObject<{
5471
5482
  after: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
5472
5483
  limitedTo: z.ZodOptional<z.ZodNumber>;
5473
5484
  for: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodRecord<z.ZodString, z.ZodString>]>>;
5474
- }, {
5475
- to: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodAny]>>, Record<string, any>, Record<string, any>>;
5476
- }>, "strip", z.ZodTypeAny, {
5477
- to: Record<string, any>;
5485
+ }, "to">, "strip", z.ZodTypeAny, {
5478
5486
  with?: Record<string, any> | Record<string, any>[] | undefined;
5479
5487
  including?: Record<string, any> | undefined;
5480
5488
  selecting?: string[] | undefined;
@@ -5491,7 +5499,6 @@ declare const QuerySchema: z.ZodObject<{
5491
5499
  limitedTo?: number | undefined;
5492
5500
  for?: string[] | Record<string, string> | undefined;
5493
5501
  }, {
5494
- to: Record<string, any>;
5495
5502
  with?: Record<string, any> | Record<string, any>[] | undefined;
5496
5503
  including?: Record<string, any> | undefined;
5497
5504
  selecting?: string[] | undefined;
@@ -5507,7 +5514,81 @@ declare const QuerySchema: z.ZodObject<{
5507
5514
  after?: string | null | undefined;
5508
5515
  limitedTo?: number | undefined;
5509
5516
  for?: string[] | Record<string, string> | undefined;
5510
- }>>>;
5517
+ }>>>>;
5518
+ create: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
5519
+ model: z.ZodString;
5520
+ to: z.ZodRecord<z.ZodString, z.ZodAny>;
5521
+ }, "strip", z.ZodTypeAny, {
5522
+ to: Record<string, any>;
5523
+ model: string;
5524
+ }, {
5525
+ to: Record<string, any>;
5526
+ model: string;
5527
+ }>, z.ZodObject<{
5528
+ model: z.ZodRecord<z.ZodString, z.ZodAny>;
5529
+ }, "strip", z.ZodTypeAny, {
5530
+ model: Record<string, any>;
5531
+ }, {
5532
+ model: Record<string, any>;
5533
+ }>]>>;
5534
+ alter: z.ZodOptional<z.ZodIntersection<z.ZodObject<{
5535
+ model: z.ZodString;
5536
+ }, "strip", z.ZodTypeAny, {
5537
+ model: string;
5538
+ }, {
5539
+ model: string;
5540
+ }>, z.ZodUnion<[z.ZodObject<{
5541
+ to: z.ZodRecord<z.ZodString, z.ZodAny>;
5542
+ }, "strip", z.ZodTypeAny, {
5543
+ to: Record<string, any>;
5544
+ }, {
5545
+ to: Record<string, any>;
5546
+ }>, z.ZodObject<{
5547
+ create: z.ZodUnion<[z.ZodIntersection<z.ZodRecord<z.ZodEnum<["field", "index", "trigger", "preset"]>, z.ZodString>, z.ZodObject<{
5548
+ to: z.ZodRecord<z.ZodString, z.ZodAny>;
5549
+ }, "strip", z.ZodTypeAny, {
5550
+ to: Record<string, any>;
5551
+ }, {
5552
+ to: Record<string, any>;
5553
+ }>>, z.ZodRecord<z.ZodEnum<["field", "index", "trigger", "preset"]>, z.ZodRecord<z.ZodString, z.ZodAny>>]>;
5554
+ }, "strip", z.ZodTypeAny, {
5555
+ create: (Partial<Record<"field" | "index" | "trigger" | "preset", string>> & {
5556
+ to: Record<string, any>;
5557
+ }) | Partial<Record<"field" | "index" | "trigger" | "preset", Record<string, any>>>;
5558
+ }, {
5559
+ create: (Partial<Record<"field" | "index" | "trigger" | "preset", string>> & {
5560
+ to: Record<string, any>;
5561
+ }) | Partial<Record<"field" | "index" | "trigger" | "preset", Record<string, any>>>;
5562
+ }>, z.ZodObject<{
5563
+ alter: z.ZodIntersection<z.ZodRecord<z.ZodEnum<["field", "index", "trigger", "preset"]>, z.ZodString>, z.ZodObject<{
5564
+ to: z.ZodRecord<z.ZodString, z.ZodAny>;
5565
+ }, "strip", z.ZodTypeAny, {
5566
+ to: Record<string, any>;
5567
+ }, {
5568
+ to: Record<string, any>;
5569
+ }>>;
5570
+ }, "strip", z.ZodTypeAny, {
5571
+ alter: Partial<Record<"field" | "index" | "trigger" | "preset", string>> & {
5572
+ to: Record<string, any>;
5573
+ };
5574
+ }, {
5575
+ alter: Partial<Record<"field" | "index" | "trigger" | "preset", string>> & {
5576
+ to: Record<string, any>;
5577
+ };
5578
+ }>, z.ZodObject<{
5579
+ drop: z.ZodRecord<z.ZodEnum<["field", "index", "trigger", "preset"]>, z.ZodString>;
5580
+ }, "strip", z.ZodTypeAny, {
5581
+ drop: Partial<Record<"field" | "index" | "trigger" | "preset", string>>;
5582
+ }, {
5583
+ drop: Partial<Record<"field" | "index" | "trigger" | "preset", string>>;
5584
+ }>]>>>;
5585
+ drop: z.ZodOptional<z.ZodObject<{
5586
+ model: z.ZodString;
5587
+ }, "strip", z.ZodTypeAny, {
5588
+ model: string;
5589
+ }, {
5590
+ model: string;
5591
+ }>>;
5511
5592
  }, "strip", z.ZodTypeAny, {
5512
5593
  get?: Record<string, {
5513
5594
  with?: Record<string, any> | Record<string, any>[] | undefined;
@@ -5544,8 +5625,8 @@ declare const QuerySchema: z.ZodObject<{
5544
5625
  limitedTo?: number | undefined;
5545
5626
  for?: string[] | Record<string, string> | undefined;
5546
5627
  }> | undefined;
5547
- drop?: Record<string, {
5548
- with?: Record<string, any> | Record<string, any>[] | undefined;
5628
+ add?: Record<string, {
5629
+ to: Record<string, any>;
5549
5630
  including?: Record<string, any> | undefined;
5550
5631
  selecting?: string[] | undefined;
5551
5632
  orderedBy?: {
@@ -5559,10 +5640,9 @@ declare const QuerySchema: z.ZodObject<{
5559
5640
  before?: string | null | undefined;
5560
5641
  after?: string | null | undefined;
5561
5642
  limitedTo?: number | undefined;
5562
- for?: string[] | Record<string, string> | undefined;
5563
5643
  }> | undefined;
5564
- create?: Record<string, {
5565
- to: Record<string, any>;
5644
+ delete?: Record<string, {
5645
+ with?: Record<string, any> | Record<string, any>[] | undefined;
5566
5646
  including?: Record<string, any> | undefined;
5567
5647
  selecting?: string[] | undefined;
5568
5648
  orderedBy?: {
@@ -5576,6 +5656,7 @@ declare const QuerySchema: z.ZodObject<{
5576
5656
  before?: string | null | undefined;
5577
5657
  after?: string | null | undefined;
5578
5658
  limitedTo?: number | undefined;
5659
+ for?: string[] | Record<string, string> | undefined;
5579
5660
  }> | undefined;
5580
5661
  count?: Record<string, {
5581
5662
  with?: Record<string, any> | Record<string, any>[] | undefined;
@@ -5594,6 +5675,30 @@ declare const QuerySchema: z.ZodObject<{
5594
5675
  limitedTo?: number | undefined;
5595
5676
  for?: string[] | Record<string, string> | undefined;
5596
5677
  } | null> | undefined;
5678
+ create?: {
5679
+ to: Record<string, any>;
5680
+ model: string;
5681
+ } | {
5682
+ model: Record<string, any>;
5683
+ } | undefined;
5684
+ alter?: ({
5685
+ model: string;
5686
+ } & ({
5687
+ to: Record<string, any>;
5688
+ } | {
5689
+ create: (Partial<Record<"field" | "index" | "trigger" | "preset", string>> & {
5690
+ to: Record<string, any>;
5691
+ }) | Partial<Record<"field" | "index" | "trigger" | "preset", Record<string, any>>>;
5692
+ } | {
5693
+ alter: Partial<Record<"field" | "index" | "trigger" | "preset", string>> & {
5694
+ to: Record<string, any>;
5695
+ };
5696
+ } | {
5697
+ drop: Partial<Record<"field" | "index" | "trigger" | "preset", string>>;
5698
+ })) | undefined;
5699
+ drop?: {
5700
+ model: string;
5701
+ } | undefined;
5597
5702
  }, {
5598
5703
  get?: Record<string, {
5599
5704
  with?: Record<string, any> | Record<string, any>[] | undefined;
@@ -5630,8 +5735,8 @@ declare const QuerySchema: z.ZodObject<{
5630
5735
  limitedTo?: number | undefined;
5631
5736
  for?: string[] | Record<string, string> | undefined;
5632
5737
  }> | undefined;
5633
- drop?: Record<string, {
5634
- with?: Record<string, any> | Record<string, any>[] | undefined;
5738
+ add?: Record<string, {
5739
+ to: Record<string, any>;
5635
5740
  including?: Record<string, any> | undefined;
5636
5741
  selecting?: string[] | undefined;
5637
5742
  orderedBy?: {
@@ -5645,10 +5750,9 @@ declare const QuerySchema: z.ZodObject<{
5645
5750
  before?: string | null | undefined;
5646
5751
  after?: string | null | undefined;
5647
5752
  limitedTo?: number | undefined;
5648
- for?: string[] | Record<string, string> | undefined;
5649
5753
  }> | undefined;
5650
- create?: Record<string, {
5651
- to: Record<string, any>;
5754
+ delete?: Record<string, {
5755
+ with?: Record<string, any> | Record<string, any>[] | undefined;
5652
5756
  including?: Record<string, any> | undefined;
5653
5757
  selecting?: string[] | undefined;
5654
5758
  orderedBy?: {
@@ -5662,6 +5766,7 @@ declare const QuerySchema: z.ZodObject<{
5662
5766
  before?: string | null | undefined;
5663
5767
  after?: string | null | undefined;
5664
5768
  limitedTo?: number | undefined;
5769
+ for?: string[] | Record<string, string> | undefined;
5665
5770
  }> | undefined;
5666
5771
  count?: Record<string, {
5667
5772
  with?: Record<string, any> | Record<string, any>[] | undefined;
@@ -5680,10 +5785,35 @@ declare const QuerySchema: z.ZodObject<{
5680
5785
  limitedTo?: number | undefined;
5681
5786
  for?: string[] | Record<string, string> | undefined;
5682
5787
  } | null> | undefined;
5788
+ create?: {
5789
+ to: Record<string, any>;
5790
+ model: string;
5791
+ } | {
5792
+ model: Record<string, any>;
5793
+ } | undefined;
5794
+ alter?: ({
5795
+ model: string;
5796
+ } & ({
5797
+ to: Record<string, any>;
5798
+ } | {
5799
+ create: (Partial<Record<"field" | "index" | "trigger" | "preset", string>> & {
5800
+ to: Record<string, any>;
5801
+ }) | Partial<Record<"field" | "index" | "trigger" | "preset", Record<string, any>>>;
5802
+ } | {
5803
+ alter: Partial<Record<"field" | "index" | "trigger" | "preset", string>> & {
5804
+ to: Record<string, any>;
5805
+ };
5806
+ } | {
5807
+ drop: Partial<Record<"field" | "index" | "trigger" | "preset", string>>;
5808
+ })) | undefined;
5809
+ drop?: {
5810
+ model: string;
5811
+ } | undefined;
5683
5812
  }>;
5684
5813
 
5685
5814
  type GetInstructions = z.infer<typeof GetInstructionsSchema>;
5686
5815
  type WithInstruction = z.infer<typeof WithInstructionSchema>;
5816
+ type Expression = z.infer<typeof ExpressionSchema>;
5687
5817
  type Query = z.infer<typeof QuerySchema>;
5688
5818
  interface Statement {
5689
5819
  statement: string;
@@ -5691,21 +5821,58 @@ interface Statement {
5691
5821
  returning?: boolean;
5692
5822
  }
5693
5823
 
5824
+ type ModelFieldCollation = 'BINARY' | 'NOCASE' | 'RTRIM';
5694
5825
  type ModelFieldBasics = {
5826
+ /** The label that should be used when displaying the field on the RONIN dashboard. */
5695
5827
  name?: string;
5828
+ /** Allows for addressing the field programmatically. */
5696
5829
  slug: string;
5830
+ /** How the field should be displayed visually on the RONIN dashboard. */
5697
5831
  displayAs?: string;
5832
+ /**
5833
+ * If set, only one record of the same model will be allowed to exist with a given
5834
+ * value for the field.
5835
+ */
5698
5836
  unique?: boolean;
5837
+ /**
5838
+ * Whether a value must be provided for the field. If this attribute is set and no
5839
+ * value is provided, an error will be thrown.
5840
+ */
5699
5841
  required?: boolean;
5842
+ /**
5843
+ * The value that should be inserted into the field in the case that no value was
5844
+ * explicitly provided for it when a record is created.
5845
+ */
5700
5846
  defaultValue?: unknown;
5847
+ /**
5848
+ * An expression that should be evaluated to form the value of the field. The
5849
+ * expression can either be VIRTUAL (evaluated whenever a record is read) or STORED
5850
+ * (evaluated whenever a record is created or updated).
5851
+ */
5852
+ computedAs?: {
5853
+ kind: 'VIRTUAL' | 'STORED';
5854
+ value: Expression;
5855
+ };
5856
+ /** An expression that gets evaluated every time a value is provided for the field. */
5857
+ check?: Expression;
5858
+ /**
5859
+ * If the field is of type `string`, setting this attribute defines the collation
5860
+ * sequence to use for the field value.
5861
+ */
5862
+ collation?: ModelFieldCollation;
5863
+ /**
5864
+ * If the field is of type `number`, setting this attribute will automatically increment
5865
+ * the value of the field with every new record that gets inserted.
5866
+ */
5867
+ increment?: boolean;
5701
5868
  };
5702
5869
  type ModelFieldNormal = ModelFieldBasics & {
5703
5870
  type: 'string' | 'number' | 'boolean' | 'date' | 'json' | 'group';
5704
5871
  };
5705
5872
  type ModelFieldReferenceAction = 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT' | 'NO ACTION';
5706
5873
  type ModelFieldReference = ModelFieldBasics & {
5707
- type: 'reference';
5708
- target: Omit<Partial<Model>, 'slug'> & Pick<Model, 'slug'>;
5874
+ type: 'link';
5875
+ target: string;
5709
5876
  kind?: 'one' | 'many';
5710
5877
  actions?: {
5711
5878
  onDelete?: ModelFieldReferenceAction;
@@ -5715,7 +5882,7 @@ type ModelFieldReference = ModelFieldBasics & {
5715
5882
  type ModelField = ModelFieldNormal | ModelFieldReference;
5716
5883
  type ModelIndexField = {
5717
5884
  /** The collating sequence used for text placed inside the field. */
5718
- collation?: 'BINARY' | 'NOCASE' | 'RTRIM';
5885
+ collation?: ModelFieldCollation;
5719
5886
  /** How the records in the index should be ordered. */
5720
5887
  order?: 'ASC' | 'DESC';
5721
5888
  } & ({
@@ -5730,6 +5897,10 @@ type ModelIndex = {
5730
5897
  * The list of fields in the model for which the index should be created.
5731
5898
  */
5732
5899
  fields: Array<ModelIndexField>;
5900
+ /**
5901
+ * The identifier of the index.
5902
+ */
5903
+ slug?: string;
5733
5904
  /**
5734
5905
  * Whether only one record with a unique value for the provided fields will be allowed.
5735
5906
  */
@@ -5750,7 +5921,7 @@ type ModelTriggerField = {
5750
5921
  type ModelTrigger = {
5751
5922
  /** The type of query for which the trigger should fire. */
5752
5923
  action: 'INSERT' | 'UPDATE' | 'DELETE';
5753
- /** When the trigger should fire in the case that a maching query is executed. */
5924
+ /** When the trigger should fire in the case that a matching query is executed. */
5754
5925
  when: 'BEFORE' | 'DURING' | 'AFTER';
5755
5926
  /** A list of queries that should be executed when the trigger fires. */
5756
5927
  effects: Array<Query>;
@@ -5787,11 +5958,11 @@ interface Model {
5787
5958
  tableAlias?: string;
5788
5959
  /**
5789
5960
  * If the model is used to associate two models with each other (in the case of
5790
- * many-cardinality reference fields), this property should contain the field to which
5791
- * the associative model should be mounted.
5961
+ * many-cardinality link fields), this property should contain the field slug to which
5962
+ * the associative model should be mounted on the source model.
5792
5963
  */
5793
5964
  associationSlug?: string;
5794
- fields?: Array<ModelField>;
5965
+ fields: Array<ModelField>;
5795
5966
  indexes?: Array<ModelIndex>;
5796
5967
  triggers?: Array<ModelTrigger>;
5797
5968
  presets?: Array<ModelPreset>;
package/dist/index.js CHANGED
@@ -187,14 +187,14 @@ var composeConditions = (models, model, statementParams, instructionName, value,
187
187
  { ...options, fieldSlug: options.fieldSlug }
188
188
  );
189
189
  }
190
- if (modelField.type === "reference" && isNested) {
190
+ if (modelField.type === "link" && isNested) {
191
191
  const keys = Object.keys(value);
192
192
  const values = Object.values(value);
193
193
  let recordTarget;
194
194
  if (keys.length === 1 && keys[0] === "id") {
195
195
  recordTarget = values[0];
196
196
  } else {
197
- const relatedModel = getModelBySlug(models, modelField.target.slug);
197
+ const relatedModel = getModelBySlug(models, modelField.target);
198
198
  const subQuery = {
199
199
  get: {
200
200
  [relatedModel.slug]: {
@@ -490,16 +490,16 @@ var SYSTEM_MODELS = [
490
490
  { slug: "type", type: "string", required: true },
491
491
  {
492
492
  slug: "model",
493
- type: "reference",
494
- target: { slug: "model" },
493
+ type: "link",
494
+ target: "model",
495
495
  required: true
496
496
  },
497
497
  { slug: "required", type: "boolean" },
498
498
  { slug: "defaultValue", type: "string" },
499
499
  { slug: "unique", type: "boolean" },
500
500
  { slug: "autoIncrement", type: "boolean" },
501
- // Only allowed for fields of type "reference".
502
- { slug: "target", type: "reference", target: { slug: "model" } },
501
+ // Only allowed for fields of type "link".
502
+ { slug: "target", type: "string" },
503
503
  { slug: "kind", type: "string" },
504
504
  { slug: "actions", type: "group" },
505
505
  { slug: "actions.onDelete", type: "string" },
@@ -516,8 +516,8 @@ var SYSTEM_MODELS = [
516
516
  { slug: "slug", type: "string", required: true },
517
517
  {
518
518
  slug: "model",
519
- type: "reference",
520
- target: { slug: "model" },
519
+ type: "link",
520
+ target: "model",
521
521
  required: true
522
522
  },
523
523
  { slug: "unique", type: "boolean" },
@@ -535,8 +535,8 @@ var SYSTEM_MODELS = [
535
535
  { slug: "slug", type: "string", required: true },
536
536
  {
537
537
  slug: "model",
538
- type: "reference",
539
- target: { slug: "model" },
538
+ type: "link",
539
+ target: "model",
540
540
  required: true
541
541
  },
542
542
  { slug: "when", type: "string", required: true },
@@ -552,8 +552,8 @@ var SYSTEM_MODELS = [
552
552
  { slug: "slug", type: "string", required: true },
553
553
  {
554
554
  slug: "model",
555
- type: "reference",
556
- target: { slug: "model" },
555
+ type: "link",
556
+ target: "model",
557
557
  required: true
558
558
  },
559
559
  { slug: "instructions", type: "json", required: true }
@@ -568,8 +568,8 @@ var addSystemModels = (models) => {
568
568
  const associativeModels = models.flatMap((model) => {
569
569
  const addedModels = [];
570
570
  for (const field of model.fields || []) {
571
- if (field.type === "reference" && !field.slug.startsWith("ronin.")) {
572
- const relatedModel = getModelBySlug(models, field.target.slug);
571
+ if (field.type === "link" && !field.slug.startsWith("ronin.")) {
572
+ const relatedModel = getModelBySlug(models, field.target);
573
573
  let fieldSlug = relatedModel.slug;
574
574
  if (field.kind === "many") {
575
575
  fieldSlug = composeAssociationModelSlug(model, field);
@@ -580,13 +580,13 @@ var addSystemModels = (models) => {
580
580
  fields: [
581
581
  {
582
582
  slug: "source",
583
- type: "reference",
584
- target: { slug: model.slug }
583
+ type: "link",
584
+ target: model.slug
585
585
  },
586
586
  {
587
587
  slug: "target",
588
- type: "reference",
589
- target: { slug: relatedModel.slug }
588
+ type: "link",
589
+ target: relatedModel.slug
590
590
  }
591
591
  ]
592
592
  });
@@ -600,8 +600,8 @@ var addSystemModels = (models) => {
600
600
  var addDefaultModelPresets = (list, model) => {
601
601
  const defaultPresets = [];
602
602
  for (const field of model.fields || []) {
603
- if (field.type === "reference" && !field.slug.startsWith("ronin.")) {
604
- const relatedModel = getModelBySlug(list, field.target.slug);
603
+ if (field.type === "link" && !field.slug.startsWith("ronin.")) {
604
+ const relatedModel = getModelBySlug(list, field.target);
605
605
  if (field.kind === "many") continue;
606
606
  defaultPresets.push({
607
607
  instructions: {
@@ -611,7 +611,7 @@ var addDefaultModelPresets = (list, model) => {
611
611
  get: {
612
612
  [relatedModel.slug]: {
613
613
  with: {
614
- // Compare the `id` field of the related model to the reference field on
614
+ // Compare the `id` field of the related model to the link field on
615
615
  // the root model (`field.slug`).
616
616
  id: {
617
617
  [RONIN_MODEL_SYMBOLS.EXPRESSION]: `${RONIN_MODEL_SYMBOLS.FIELD_PARENT}${field.slug}`
@@ -629,7 +629,7 @@ var addDefaultModelPresets = (list, model) => {
629
629
  }
630
630
  const childModels = list.map((subModel) => {
631
631
  const field = subModel.fields?.find((field2) => {
632
- return field2.type === "reference" && field2.target.slug === model.slug;
632
+ return field2.type === "link" && field2.target === model.slug;
633
633
  });
634
634
  if (!field) return null;
635
635
  return { model: subModel, field };
@@ -665,12 +665,12 @@ var addDefaultModelPresets = (list, model) => {
665
665
  return model;
666
666
  };
667
667
  var mappedInstructions = {
668
- create: "to",
668
+ add: "to",
669
669
  set: "with",
670
- drop: "with"
670
+ delete: "with"
671
671
  };
672
672
  var typesInSQLite = {
673
- reference: "TEXT",
673
+ link: "TEXT",
674
674
  string: "TEXT",
675
675
  date: "DATETIME",
676
676
  blob: "TEXT",
@@ -678,7 +678,7 @@ var typesInSQLite = {
678
678
  number: "INTEGER",
679
679
  json: "TEXT"
680
680
  };
681
- var getFieldStatement = (field) => {
681
+ var getFieldStatement = (models, model, field) => {
682
682
  if (field.type === "group") return null;
683
683
  let statement = `"${field.slug}" ${typesInSQLite[field.type]}`;
684
684
  if (field.slug === "id") statement += " PRIMARY KEY";
@@ -686,9 +686,20 @@ var getFieldStatement = (field) => {
686
686
  if (field.required === true) statement += " NOT NULL";
687
687
  if (typeof field.defaultValue !== "undefined")
688
688
  statement += ` DEFAULT ${field.defaultValue}`;
689
- if (field.type === "reference") {
689
+ if (field.collation) statement += ` COLLATE ${field.collation}`;
690
+ if (field.increment === true) statement += " AUTOINCREMENT";
691
+ if (typeof field.check !== "undefined") {
692
+ const symbol = getSymbol(field.check);
693
+ statement += ` CHECK (${parseFieldExpression(model, "to", symbol?.value)})`;
694
+ }
695
+ if (typeof field.computedAs !== "undefined") {
696
+ const { kind, value } = field.computedAs;
697
+ const symbol = getSymbol(value);
698
+ statement += ` GENERATED ALWAYS AS (${parseFieldExpression(model, "to", symbol?.value)}) ${kind}`;
699
+ }
700
+ if (field.type === "link") {
690
701
  const actions = field.actions || {};
691
- const targetTable = convertToSnakeCase(pluralize(field.target.slug));
702
+ const targetTable = getModelBySlug(models, field.target).table;
692
703
  statement += ` REFERENCES ${targetTable}("id")`;
693
704
  for (const trigger in actions) {
694
705
  const triggerName = trigger.toUpperCase().slice(2);
@@ -698,18 +709,17 @@ var getFieldStatement = (field) => {
698
709
  }
699
710
  return statement;
700
711
  };
701
- var addModelQueries = (models, queryDetails, dependencyStatements) => {
702
- const { queryType, queryModel, queryInstructions: queryInstructionsRaw } = queryDetails;
703
- const queryInstructions = queryInstructionsRaw;
704
- if (!["create", "set", "drop"].includes(queryType)) return queryInstructions;
705
- if (!SYSTEM_MODEL_SLUGS.includes(queryModel)) return queryInstructions;
712
+ var addModelQueries = (models, dependencyStatements, queryDetails) => {
713
+ const { queryType, queryModel, queryInstructions } = queryDetails;
714
+ if (!["add", "set", "delete"].includes(queryType)) return;
715
+ if (!SYSTEM_MODEL_SLUGS.includes(queryModel)) return;
706
716
  const instructionName = mappedInstructions[queryType];
707
717
  const instructionList = queryInstructions[instructionName];
708
718
  const kind = getModelBySlug(SYSTEM_MODELS, queryModel).pluralSlug;
709
719
  let tableAction = "ALTER";
710
720
  let queryTypeReadable = null;
711
721
  switch (queryType) {
712
- case "create": {
722
+ case "add": {
713
723
  if (kind === "models" || kind === "indexes" || kind === "triggers") {
714
724
  tableAction = "CREATE";
715
725
  }
@@ -721,7 +731,7 @@ var addModelQueries = (models, queryDetails, dependencyStatements) => {
721
731
  queryTypeReadable = "updating";
722
732
  break;
723
733
  }
724
- case "drop": {
734
+ case "delete": {
725
735
  if (kind === "models" || kind === "indexes" || kind === "triggers") {
726
736
  tableAction = "DROP";
727
737
  }
@@ -730,25 +740,11 @@ var addModelQueries = (models, queryDetails, dependencyStatements) => {
730
740
  }
731
741
  }
732
742
  const slug = instructionList?.slug?.being || instructionList?.slug;
733
- if (!slug) {
734
- throw new RoninError({
735
- message: `When ${queryTypeReadable} ${kind}, a \`slug\` field must be provided in the \`${instructionName}\` instruction.`,
736
- code: "MISSING_FIELD",
737
- fields: ["slug"]
738
- });
739
- }
740
743
  const modelInstruction = instructionList?.model;
741
744
  const modelSlug = modelInstruction?.slug?.being || modelInstruction?.slug;
742
- if (kind !== "models" && !modelSlug) {
743
- throw new RoninError({
744
- message: `When ${queryTypeReadable} ${kind}, a \`model.slug\` field must be provided in the \`${instructionName}\` instruction.`,
745
- code: "MISSING_FIELD",
746
- fields: ["model.slug"]
747
- });
748
- }
749
745
  const usableSlug = kind === "models" ? slug : modelSlug;
750
746
  const tableName = convertToSnakeCase(pluralize(usableSlug));
751
- const targetModel = kind === "models" && queryType === "create" ? null : getModelBySlug(models, usableSlug);
747
+ const targetModel = kind === "models" && queryType === "add" ? null : getModelBySlug(models, usableSlug);
752
748
  if (kind === "indexes") {
753
749
  const indexName = convertToSnakeCase(slug);
754
750
  const unique = instructionList?.unique;
@@ -756,7 +752,7 @@ var addModelQueries = (models, queryDetails, dependencyStatements) => {
756
752
  const fields = instructionList?.fields;
757
753
  const params = [];
758
754
  let statement2 = `${tableAction}${unique ? " UNIQUE" : ""} INDEX "${indexName}"`;
759
- if (queryType === "create") {
755
+ if (queryType === "add") {
760
756
  const model = targetModel;
761
757
  const columns = fields.map((field) => {
762
758
  let fieldSelector = "";
@@ -781,13 +777,13 @@ var addModelQueries = (models, queryDetails, dependencyStatements) => {
781
777
  }
782
778
  }
783
779
  dependencyStatements.push({ statement: statement2, params });
784
- return queryInstructions;
780
+ return;
785
781
  }
786
782
  if (kind === "triggers") {
787
783
  const triggerName = convertToSnakeCase(slug);
788
784
  const params = [];
789
785
  let statement2 = `${tableAction} TRIGGER "${triggerName}"`;
790
- if (queryType === "create") {
786
+ if (queryType === "add") {
791
787
  const currentModel = targetModel;
792
788
  const { when, action } = instructionList;
793
789
  const statementParts = [`${when} ${action}`];
@@ -833,26 +829,19 @@ var addModelQueries = (models, queryDetails, dependencyStatements) => {
833
829
  statement2 += ` ${statementParts.join(" ")}`;
834
830
  }
835
831
  dependencyStatements.push({ statement: statement2, params });
836
- return queryInstructions;
832
+ return;
837
833
  }
838
834
  const statement = `${tableAction} TABLE "${tableName}"`;
839
835
  if (kind === "models") {
840
- if (queryType === "create" || queryType === "set") {
841
- const modelWithFields = addDefaultModelFields(
842
- queryInstructions.to,
843
- queryType === "create"
844
- );
845
- const modelWithPresets = addDefaultModelPresets(models, modelWithFields);
846
- queryInstructions.to = modelWithPresets;
847
- }
848
- if (queryType === "create") {
849
- const { fields } = queryInstructions.to;
850
- const columns = fields.map(getFieldStatement).filter(Boolean);
836
+ if (queryType === "add") {
837
+ const newModel = queryInstructions.to;
838
+ const { fields } = newModel;
839
+ const columns = fields.map((field) => getFieldStatement(models, newModel, field)).filter(Boolean);
851
840
  dependencyStatements.push({
852
841
  statement: `${statement} (${columns.join(", ")})`,
853
842
  params: []
854
843
  });
855
- models.push(queryInstructions.to);
844
+ models.push(newModel);
856
845
  } else if (queryType === "set") {
857
846
  const newSlug = queryInstructions.to?.pluralSlug;
858
847
  if (newSlug) {
@@ -863,23 +852,17 @@ var addModelQueries = (models, queryDetails, dependencyStatements) => {
863
852
  });
864
853
  }
865
854
  Object.assign(targetModel, queryInstructions.to);
866
- } else if (queryType === "drop") {
855
+ } else if (queryType === "delete") {
867
856
  models.splice(models.indexOf(targetModel), 1);
868
857
  dependencyStatements.push({ statement, params: [] });
869
858
  }
870
- return queryInstructions;
859
+ return;
871
860
  }
872
861
  if (kind === "fields") {
873
- if (queryType === "create") {
874
- if (!instructionList.type) {
875
- throw new RoninError({
876
- message: `When ${queryTypeReadable} fields, a \`type\` field must be provided in the \`to\` instruction.`,
877
- code: "MISSING_FIELD",
878
- fields: ["type"]
879
- });
880
- }
862
+ if (queryType === "add") {
863
+ if (!instructionList.type) instructionList.type = "string";
881
864
  dependencyStatements.push({
882
- statement: `${statement} ADD COLUMN ${getFieldStatement(instructionList)}`,
865
+ statement: `${statement} ADD COLUMN ${getFieldStatement(models, targetModel, instructionList)}`,
883
866
  params: []
884
867
  });
885
868
  } else if (queryType === "set") {
@@ -890,14 +873,13 @@ var addModelQueries = (models, queryDetails, dependencyStatements) => {
890
873
  params: []
891
874
  });
892
875
  }
893
- } else if (queryType === "drop") {
876
+ } else if (queryType === "delete") {
894
877
  dependencyStatements.push({
895
878
  statement: `${statement} DROP COLUMN "${slug}"`,
896
879
  params: []
897
880
  });
898
881
  }
899
882
  }
900
- return queryInstructions;
901
883
  };
902
884
 
903
885
  // src/instructions/before-after.ts
@@ -1158,12 +1140,12 @@ var handleTo = (models, model, statementParams, queryType, dependencyStatements,
1158
1140
  const currentTime = (/* @__PURE__ */ new Date()).toISOString();
1159
1141
  const { with: withInstruction, to: toInstruction } = instructions;
1160
1142
  const defaultFields = {};
1161
- if (queryType === "create") {
1143
+ if (queryType === "add") {
1162
1144
  defaultFields.id = toInstruction.id || generateRecordId(model.idPrefix);
1163
1145
  }
1164
1146
  defaultFields.ronin = {
1165
1147
  // If records are being created, set their creation time.
1166
- ...queryType === "create" ? { createdAt: currentTime } : {},
1148
+ ...queryType === "add" ? { createdAt: currentTime } : {},
1167
1149
  // If records are being created or updated, set their update time.
1168
1150
  updatedAt: currentTime,
1169
1151
  // Allow for overwriting the default values provided above.
@@ -1201,17 +1183,17 @@ var handleTo = (models, model, statementParams, queryType, dependencyStatements,
1201
1183
  for (const fieldSlug in toInstruction) {
1202
1184
  const fieldValue = toInstruction[fieldSlug];
1203
1185
  const fieldDetails = getFieldFromModel(model, fieldSlug, "to");
1204
- if (fieldDetails.field.type === "reference" && fieldDetails.field.kind === "many") {
1186
+ if (fieldDetails.field.type === "link" && fieldDetails.field.kind === "many") {
1205
1187
  delete toInstruction[fieldSlug];
1206
1188
  const associativeModelSlug = composeAssociationModelSlug(model, fieldDetails.field);
1207
1189
  const composeStatement = (subQueryType, value) => {
1208
- const source = queryType === "create" ? { id: toInstruction.id } : withInstruction;
1190
+ const source = queryType === "add" ? { id: toInstruction.id } : withInstruction;
1209
1191
  const recordDetails = { source };
1210
1192
  if (value) recordDetails.target = value;
1211
1193
  return compileQueryInput(
1212
1194
  {
1213
1195
  [subQueryType]: {
1214
- [associativeModelSlug]: subQueryType === "create" ? { to: recordDetails } : { with: recordDetails }
1196
+ [associativeModelSlug]: subQueryType === "add" ? { to: recordDetails } : { with: recordDetails }
1215
1197
  }
1216
1198
  },
1217
1199
  models,
@@ -1220,25 +1202,25 @@ var handleTo = (models, model, statementParams, queryType, dependencyStatements,
1220
1202
  ).main;
1221
1203
  };
1222
1204
  if (Array.isArray(fieldValue)) {
1223
- dependencyStatements.push(composeStatement("drop"));
1205
+ dependencyStatements.push(composeStatement("delete"));
1224
1206
  for (const record of fieldValue) {
1225
- dependencyStatements.push(composeStatement("create", record));
1207
+ dependencyStatements.push(composeStatement("add", record));
1226
1208
  }
1227
1209
  } else if (isObject(fieldValue)) {
1228
1210
  for (const recordToAdd of fieldValue.containing || []) {
1229
- dependencyStatements.push(composeStatement("create", recordToAdd));
1211
+ dependencyStatements.push(composeStatement("add", recordToAdd));
1230
1212
  }
1231
1213
  for (const recordToRemove of fieldValue.notContaining || []) {
1232
- dependencyStatements.push(composeStatement("drop", recordToRemove));
1214
+ dependencyStatements.push(composeStatement("delete", recordToRemove));
1233
1215
  }
1234
1216
  }
1235
1217
  }
1236
1218
  }
1237
1219
  let statement = composeConditions(models, model, statementParams, "to", toInstruction, {
1238
1220
  parentModel,
1239
- type: queryType === "create" ? "fields" : void 0
1221
+ type: queryType === "add" ? "fields" : void 0
1240
1222
  });
1241
- if (queryType === "create") {
1223
+ if (queryType === "add") {
1242
1224
  const deepStatement = composeConditions(
1243
1225
  models,
1244
1226
  model,
@@ -1266,11 +1248,6 @@ var compileQueryInput = (query, models, statementParams, options) => {
1266
1248
  let instructions = formatIdentifiers(model, queryInstructions);
1267
1249
  const dependencyStatements = [];
1268
1250
  const returning = options?.returning ?? true;
1269
- instructions = addModelQueries(
1270
- models,
1271
- { queryType, queryModel, queryInstructions: instructions },
1272
- dependencyStatements
1273
- );
1274
1251
  if (instructions && Object.hasOwn(instructions, "for")) {
1275
1252
  instructions = handleFor(model, instructions);
1276
1253
  }
@@ -1283,17 +1260,17 @@ var compileQueryInput = (query, models, statementParams, options) => {
1283
1260
  case "get":
1284
1261
  statement += `SELECT ${columns} FROM `;
1285
1262
  break;
1286
- case "count":
1287
- statement += `SELECT COUNT(${columns}) FROM `;
1288
- break;
1289
- case "drop":
1290
- statement += "DELETE FROM ";
1263
+ case "set":
1264
+ statement += "UPDATE ";
1291
1265
  break;
1292
- case "create":
1266
+ case "add":
1293
1267
  statement += "INSERT INTO ";
1294
1268
  break;
1295
- case "set":
1296
- statement += "UPDATE ";
1269
+ case "delete":
1270
+ statement += "DELETE FROM ";
1271
+ break;
1272
+ case "count":
1273
+ statement += `SELECT COUNT(${columns}) FROM `;
1297
1274
  break;
1298
1275
  }
1299
1276
  let isJoiningMultipleRows = false;
@@ -1314,7 +1291,7 @@ var compileQueryInput = (query, models, statementParams, options) => {
1314
1291
  } else {
1315
1292
  statement += `"${model.table}" `;
1316
1293
  }
1317
- if (queryType === "create" || queryType === "set") {
1294
+ if (queryType === "add" || queryType === "set") {
1318
1295
  if (!isObject(instructions.to) || Object.keys(instructions.to).length === 0) {
1319
1296
  throw new RoninError({
1320
1297
  message: `When using a \`${queryType}\` query, the \`to\` instruction must be a non-empty object.`,
@@ -1334,7 +1311,7 @@ var compileQueryInput = (query, models, statementParams, options) => {
1334
1311
  statement += `${toStatement} `;
1335
1312
  }
1336
1313
  const conditions = [];
1337
- if (queryType !== "create" && instructions && Object.hasOwn(instructions, "with")) {
1314
+ if (queryType !== "add" && instructions && Object.hasOwn(instructions, "with")) {
1338
1315
  const withStatement = handleWith(
1339
1316
  models,
1340
1317
  model,
@@ -1387,7 +1364,7 @@ var compileQueryInput = (query, models, statementParams, options) => {
1387
1364
  if (queryType === "get" && !isJoiningMultipleRows && (single || instructions?.limitedTo)) {
1388
1365
  statement += handleLimitedTo(single, instructions?.limitedTo);
1389
1366
  }
1390
- if (["create", "set", "drop"].includes(queryType) && returning) {
1367
+ if (["add", "set", "delete"].includes(queryType) && returning) {
1391
1368
  statement += "RETURNING * ";
1392
1369
  }
1393
1370
  const mainStatement = {
@@ -1401,6 +1378,122 @@ var compileQueryInput = (query, models, statementParams, options) => {
1401
1378
  };
1402
1379
  };
1403
1380
 
1381
+ // src/utils/meta.ts
1382
+ var transformMetaQuery = (models, dependencyStatements, query) => {
1383
+ if (query.create) {
1384
+ const init = query.create.model;
1385
+ const details = "to" in query.create ? { slug: init, ...query.create.to } : init;
1386
+ const modelWithFields = addDefaultModelFields(details, true);
1387
+ const modelWithPresets = addDefaultModelPresets(models, modelWithFields);
1388
+ const instructions = {
1389
+ to: modelWithPresets
1390
+ };
1391
+ addModelQueries(models, dependencyStatements, {
1392
+ queryType: "add",
1393
+ queryModel: "model",
1394
+ queryInstructions: instructions
1395
+ });
1396
+ return {
1397
+ add: {
1398
+ model: instructions
1399
+ }
1400
+ };
1401
+ }
1402
+ if (query.drop) {
1403
+ const slug = query.drop.model;
1404
+ const instructions = {
1405
+ with: { slug }
1406
+ };
1407
+ addModelQueries(models, dependencyStatements, {
1408
+ queryType: "delete",
1409
+ queryModel: "model",
1410
+ queryInstructions: instructions
1411
+ });
1412
+ return {
1413
+ delete: {
1414
+ model: instructions
1415
+ }
1416
+ };
1417
+ }
1418
+ if (query.alter) {
1419
+ const slug = query.alter.model;
1420
+ if ("to" in query.alter) {
1421
+ const modelWithFields = addDefaultModelFields(query.alter.to, false);
1422
+ const modelWithPresets = addDefaultModelPresets(models, modelWithFields);
1423
+ const instructions2 = {
1424
+ with: { slug },
1425
+ to: modelWithPresets
1426
+ };
1427
+ addModelQueries(models, dependencyStatements, {
1428
+ queryType: "set",
1429
+ queryModel: "model",
1430
+ queryInstructions: instructions2
1431
+ });
1432
+ return {
1433
+ set: {
1434
+ model: instructions2
1435
+ }
1436
+ };
1437
+ }
1438
+ if ("create" in query.alter) {
1439
+ const type2 = Object.keys(query.alter.create)[0];
1440
+ const item = query.alter.create[type2];
1441
+ const completeItem = { slug: item.slug || `${type2}_slug`, ...item };
1442
+ const instructions2 = {
1443
+ to: {
1444
+ model: { slug },
1445
+ ...completeItem
1446
+ }
1447
+ };
1448
+ addModelQueries(models, dependencyStatements, {
1449
+ queryType: "add",
1450
+ queryModel: type2,
1451
+ queryInstructions: instructions2
1452
+ });
1453
+ return {
1454
+ add: {
1455
+ [type2]: instructions2
1456
+ }
1457
+ };
1458
+ }
1459
+ if ("alter" in query.alter) {
1460
+ const type2 = Object.keys(query.alter.alter)[0];
1461
+ const itemSlug2 = query.alter.alter[type2];
1462
+ const newItem = query.alter.alter.to;
1463
+ const instructions2 = {
1464
+ with: { model: { slug }, slug: itemSlug2 },
1465
+ to: newItem
1466
+ };
1467
+ addModelQueries(models, dependencyStatements, {
1468
+ queryType: "set",
1469
+ queryModel: type2,
1470
+ queryInstructions: instructions2
1471
+ });
1472
+ return {
1473
+ set: {
1474
+ [type2]: instructions2
1475
+ }
1476
+ };
1477
+ }
1478
+ const type = Object.keys(query.alter.drop)[0];
1479
+ const itemSlug = query.alter.drop[type];
1480
+ const instructions = {
1481
+ with: { model: { slug }, slug: itemSlug }
1482
+ };
1483
+ addModelQueries(models, dependencyStatements, {
1484
+ queryType: "delete",
1485
+ queryModel: type,
1486
+ queryInstructions: instructions
1487
+ });
1488
+ return {
1489
+ delete: {
1490
+ [type]: instructions
1491
+ }
1492
+ };
1493
+ }
1494
+ return query;
1495
+ };
1496
+
1404
1497
  // src/index.ts
1405
1498
  var compileQueries = (queries, models, options) => {
1406
1499
  const modelList = addSystemModels(models).map((model) => {
@@ -1412,8 +1505,13 @@ var compileQueries = (queries, models, options) => {
1412
1505
  const dependencyStatements = [];
1413
1506
  const mainStatements = [];
1414
1507
  for (const query of queries) {
1508
+ const transformedQuery = transformMetaQuery(
1509
+ modelListWithPresets,
1510
+ dependencyStatements,
1511
+ query
1512
+ );
1415
1513
  const result = compileQueryInput(
1416
- query,
1514
+ transformedQuery,
1417
1515
  modelListWithPresets,
1418
1516
  options?.inlineParams ? null : []
1419
1517
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ronin/compiler",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "description": "Compiles RONIN queries to SQL statements.",
6
6
  "publishConfig": {