@liquidmetal-ai/drizzle 0.17.0 → 0.19.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 (50) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/appify/build.d.ts +21 -1
  3. package/dist/appify/build.d.ts.map +1 -1
  4. package/dist/appify/build.js +121 -1
  5. package/dist/appify/build.test.js +325 -0
  6. package/dist/appify/validate.d.ts +3 -1
  7. package/dist/appify/validate.d.ts.map +1 -1
  8. package/dist/appify/validate.js +41 -0
  9. package/dist/codestore.d.ts +4 -3
  10. package/dist/codestore.d.ts.map +1 -1
  11. package/dist/codestore.js +13 -2
  12. package/dist/codestore.test.js +28 -0
  13. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts +111 -1
  14. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts.map +1 -1
  15. package/dist/liquidmetal/v1alpha1/catalog_pb.js +30 -2
  16. package/dist/liquidmetal/v1alpha1/riverjack_pb.d.ts +7 -0
  17. package/dist/liquidmetal/v1alpha1/riverjack_pb.d.ts.map +1 -1
  18. package/dist/liquidmetal/v1alpha1/riverjack_pb.js +1 -1
  19. package/dist/liquidmetal/v1alpha1/rowboat_pb.d.ts +647 -0
  20. package/dist/liquidmetal/v1alpha1/rowboat_pb.d.ts.map +1 -0
  21. package/dist/liquidmetal/v1alpha1/rowboat_pb.js +147 -0
  22. package/dist/liquidmetal/v1alpha1/search_agent_pb.d.ts +90 -1
  23. package/dist/liquidmetal/v1alpha1/search_agent_pb.d.ts.map +1 -1
  24. package/dist/liquidmetal/v1alpha1/search_agent_pb.js +44 -2
  25. package/dist/sql-migrations.d.ts +109 -0
  26. package/dist/sql-migrations.d.ts.map +1 -0
  27. package/dist/sql-migrations.js +185 -0
  28. package/dist/sql-migrations.test.d.ts +2 -0
  29. package/dist/sql-migrations.test.d.ts.map +1 -0
  30. package/dist/sql-migrations.test.js +260 -0
  31. package/dist/strict-client.d.ts +37 -0
  32. package/dist/strict-client.d.ts.map +1 -0
  33. package/dist/strict-client.js +10 -0
  34. package/package.json +4 -3
  35. package/src/appify/build.test.ts +374 -0
  36. package/src/appify/build.ts +130 -2
  37. package/src/appify/validate.ts +48 -0
  38. package/src/codestore.test.ts +35 -0
  39. package/src/codestore.ts +16 -3
  40. package/src/liquidmetal/v1alpha1/catalog_pb.ts +134 -2
  41. package/src/liquidmetal/v1alpha1/riverjack_pb.ts +9 -1
  42. package/src/liquidmetal/v1alpha1/rowboat_pb.ts +765 -0
  43. package/src/liquidmetal/v1alpha1/search_agent_pb.ts +106 -3
  44. package/src/sql-migrations.test.ts +317 -0
  45. package/src/sql-migrations.ts +307 -0
  46. package/src/strict-client.ts +46 -0
  47. package/tsconfig.tsbuildinfo +1 -1
  48. package/.turbo/turbo-build.log +0 -22
  49. package/.turbo/turbo-lint.log +0 -4
  50. package/.turbo/turbo-test.log +0 -277
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @liquidmetal-ai/drizzle
2
2
 
3
+ ## 0.19.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 54c1cde: v0.19.0 bump
8
+
9
+ ## 0.18.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 0.18.0
14
+
3
15
  ## 0.17.0
4
16
 
5
17
  ### Minor Changes
@@ -38,10 +38,12 @@ export declare class Application {
38
38
  smartSql: SmartSql[];
39
39
  smartMemory: SmartMemory[];
40
40
  payments: Payments[];
41
+ dataLake: DataLake[];
41
42
  labels: Record<string, string>;
42
43
  mcpService: McpService[];
44
+ site: Site[];
43
45
  constructor(name: TokenString, obj: ConfigObject);
44
- handlers(): (Service | Observer | Actor | Task)[];
46
+ handlers(): (Service | Observer | Actor | Task | McpService | Site)[];
45
47
  }
46
48
  export declare class Service {
47
49
  obj: ConfigObject;
@@ -78,6 +80,18 @@ export declare class McpService {
78
80
  labels: Record<string, string>;
79
81
  constructor(name: TokenString, obj: ConfigObject);
80
82
  }
83
+ export declare class Site {
84
+ obj: ConfigObject;
85
+ name: TokenString;
86
+ buildOutput?: TokenString;
87
+ buildCommand?: TokenString;
88
+ spa?: TokenBoolean;
89
+ visibility?: TokenString;
90
+ domains: Domain[];
91
+ routes: Route[];
92
+ env: Env[];
93
+ constructor(name: TokenString, obj: ConfigObject);
94
+ }
81
95
  export declare class Task {
82
96
  obj: ConfigObject;
83
97
  name: TokenString;
@@ -202,6 +216,12 @@ export declare class Payments {
202
216
  mode?: TokenString;
203
217
  constructor(name: TokenString, obj: ConfigObject);
204
218
  }
219
+ export declare class DataLake {
220
+ name: TokenString;
221
+ obj: ConfigObject;
222
+ compaction?: TokenString;
223
+ constructor(name: TokenString, obj: ConfigObject);
224
+ }
205
225
  export declare const VISIBILITIES: readonly ["none", "public", "private", "protected", "paid", "application", "suite", "tenant"];
206
226
  export type Visibility = (typeof VISIBILITIES)[number];
207
227
  export declare const TASK_TYPES: readonly ["cron"];
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/appify/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/appify/build.ts"],"names":[],"mappings":"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"}
@@ -233,6 +233,12 @@ export function buildApplication(node) {
233
233
  case 'payments':
234
234
  buildStanza(buildPayments, child, app.payments, errors);
235
235
  break;
236
+ case 'datalake':
237
+ buildStanza(buildDataLake, child, app.dataLake, errors);
238
+ break;
239
+ case 'site':
240
+ buildStanza(buildSite, child, app.site, errors);
241
+ break;
236
242
  default:
237
243
  errors.push({ message: 'unexpected stanza', ...child });
238
244
  }
@@ -604,6 +610,94 @@ function buildPayments(stanza) {
604
610
  }
605
611
  return [payments, errors];
606
612
  }
613
+ function buildDataLake(stanza) {
614
+ const errors = [];
615
+ const [name, nameErrors] = buildName1(stanza);
616
+ errors.push(...nameErrors);
617
+ const dataLake = new DataLake(name, stanza);
618
+ for (const child of stanza.block?.children ?? []) {
619
+ switch (child.type) {
620
+ case 'assignment':
621
+ switch (child.key.value) {
622
+ case 'compaction':
623
+ buildAssignment(dataLake, 'compaction', 'string', child, errors);
624
+ // Validate that compaction is either "enabled" or "disabled"
625
+ if (dataLake.compaction && child.value.type === 'string') {
626
+ const compactionValue = valueOf(dataLake.compaction);
627
+ if (compactionValue !== 'enabled' && compactionValue !== 'disabled') {
628
+ errors.push({
629
+ message: `compaction must be either "enabled" or "disabled", got "${compactionValue}"`,
630
+ ...child.value
631
+ });
632
+ }
633
+ }
634
+ break;
635
+ default:
636
+ errors.push({ message: 'unexpected assignment', ...child });
637
+ }
638
+ break;
639
+ case 'stanza':
640
+ errors.push({ message: 'unexpected stanza', ...child });
641
+ break;
642
+ case 'comment':
643
+ case 'newline':
644
+ break;
645
+ default:
646
+ errors.push({ message: `unexpected ${child.type}`, ...child });
647
+ }
648
+ }
649
+ return [dataLake, errors];
650
+ }
651
+ function buildSite(stanza) {
652
+ const errors = [];
653
+ const [name, nameErrors] = buildName1(stanza);
654
+ errors.push(...nameErrors);
655
+ const site = new Site(name, stanza);
656
+ const children = stanza.block ? stanza.block.children : [];
657
+ for (const child of children) {
658
+ switch (child.type) {
659
+ case 'stanza':
660
+ switch (child.name) {
661
+ case 'route':
662
+ buildStanza(buildRoute, child, site.routes, errors);
663
+ break;
664
+ case 'domain':
665
+ buildStanza(buildDomain, child, site.domains, errors);
666
+ break;
667
+ case 'env':
668
+ buildStanza(buildEnv, child, site.env, errors);
669
+ break;
670
+ default:
671
+ errors.push({ message: 'unexpected stanza', ...child });
672
+ }
673
+ break;
674
+ case 'assignment':
675
+ switch (child.key.value) {
676
+ case 'build_output':
677
+ buildAssignment(site, 'buildOutput', 'string', child, errors);
678
+ break;
679
+ case 'build_command':
680
+ buildAssignment(site, 'buildCommand', 'string', child, errors);
681
+ break;
682
+ case 'spa':
683
+ buildAssignment(site, 'spa', 'boolean', child, errors);
684
+ break;
685
+ case 'visibility':
686
+ buildAssignment(site, 'visibility', 'string', child, errors);
687
+ break;
688
+ default:
689
+ errors.push({ message: 'unexpected assignment', ...child });
690
+ }
691
+ break;
692
+ case 'comment':
693
+ case 'newline':
694
+ break;
695
+ default:
696
+ errors.push({ message: 'unexpected node', ...child });
697
+ }
698
+ }
699
+ return [site, errors];
700
+ }
607
701
  function buildObserver(stanza) {
608
702
  const errors = [];
609
703
  const [name, nameErrors] = buildName1(stanza);
@@ -914,15 +1008,17 @@ export class Application {
914
1008
  smartSql = [];
915
1009
  smartMemory = [];
916
1010
  payments = [];
1011
+ dataLake = [];
917
1012
  labels = {};
918
1013
  mcpService = [];
1014
+ site = [];
919
1015
  constructor(name, obj) {
920
1016
  this.name = name;
921
1017
  this.obj = obj;
922
1018
  }
923
1019
  // Return all objects that require code handlers.
924
1020
  handlers() {
925
- return [...this.service, ...this.observer, ...this.actor, ...this.task, ...this.mcpService];
1021
+ return [...this.service, ...this.observer, ...this.actor, ...this.task, ...this.mcpService, ...this.site];
926
1022
  }
927
1023
  }
928
1024
  export class Service {
@@ -969,6 +1065,21 @@ export class McpService {
969
1065
  this.obj = obj;
970
1066
  }
971
1067
  }
1068
+ export class Site {
1069
+ obj;
1070
+ name;
1071
+ buildOutput;
1072
+ buildCommand;
1073
+ spa;
1074
+ visibility;
1075
+ domains = [];
1076
+ routes = [];
1077
+ env = [];
1078
+ constructor(name, obj) {
1079
+ this.name = name;
1080
+ this.obj = obj;
1081
+ }
1082
+ }
972
1083
  export class Task {
973
1084
  obj;
974
1085
  name;
@@ -1143,5 +1254,14 @@ export class Payments {
1143
1254
  this.obj = obj;
1144
1255
  }
1145
1256
  }
1257
+ export class DataLake {
1258
+ name;
1259
+ obj;
1260
+ compaction;
1261
+ constructor(name, obj) {
1262
+ this.name = name;
1263
+ this.obj = obj;
1264
+ }
1265
+ }
1146
1266
  export const VISIBILITIES = ['none', 'public', 'private', 'protected', 'paid', 'application', 'suite', 'tenant'];
1147
1267
  export const TASK_TYPES = ['cron'];
@@ -662,3 +662,328 @@ application "my-payment-app" {
662
662
  expect(valueOf(app.service[0].name)).toBe('api');
663
663
  expect(valueOf(app.actor[0].name)).toBe('processor');
664
664
  });
665
+ test('datalake basic parsing', () => {
666
+ const CONFIG = `
667
+ application "my-app" {
668
+ datalake "analytics" {
669
+ }
670
+ }
671
+ `;
672
+ const tokenizer = new Tokenizer(CONFIG);
673
+ const parser = new Parser(tokenizer);
674
+ const ast = parser.parse();
675
+ expect(parser.errors).toEqual([]);
676
+ const [apps, errors] = buildManifest(ast);
677
+ expect(errors).toEqual([]);
678
+ // Check that we have exactly one application
679
+ expect(apps.length).toBe(1);
680
+ // Check that we have exactly one datalake
681
+ expect(apps[0].dataLake.length).toBe(1);
682
+ // Check the datalake properties
683
+ const dataLake = apps[0].dataLake[0];
684
+ expect(valueOf(dataLake.name)).toBe('analytics');
685
+ });
686
+ test('datalake with invalid properties', () => {
687
+ const CONFIG = `
688
+ application "my-app" {
689
+ datalake "analytics" {
690
+ invalid_property = "should fail"
691
+ }
692
+ }
693
+ `;
694
+ const tokenizer = new Tokenizer(CONFIG);
695
+ const parser = new Parser(tokenizer);
696
+ const ast = parser.parse();
697
+ expect(parser.errors).toEqual([]);
698
+ const [, errors] = buildManifest(ast);
699
+ // Should have one error for the invalid property
700
+ expect(errors.length).toBe(1);
701
+ expect(errors[0].message).toContain('unexpected');
702
+ });
703
+ test('datalake integration with other modules', () => {
704
+ const CONFIG = `
705
+ application "my-analytics-app" {
706
+ datalake "analytics" {
707
+ }
708
+
709
+ actor "processor" {
710
+ visibility = "protected"
711
+ }
712
+
713
+ service "api" {
714
+ }
715
+
716
+ bucket "raw-data" {
717
+ }
718
+ }
719
+ `;
720
+ const tokenizer = new Tokenizer(CONFIG);
721
+ const parser = new Parser(tokenizer);
722
+ const ast = parser.parse();
723
+ expect(parser.errors).toEqual([]);
724
+ const [apps, errors] = buildManifest(ast);
725
+ expect(errors).toEqual([]);
726
+ // Check that we have exactly one application
727
+ expect(apps.length).toBe(1);
728
+ const app = apps[0];
729
+ // Verify all module types are parsed correctly
730
+ expect(app.dataLake.length).toBe(1);
731
+ expect(app.actor.length).toBe(1);
732
+ expect(app.service.length).toBe(1);
733
+ expect(app.bucket.length).toBe(1);
734
+ // Verify datalake properties
735
+ expect(valueOf(app.dataLake[0].name)).toBe('analytics');
736
+ // Verify other modules still work correctly
737
+ expect(valueOf(app.actor[0].name)).toBe('processor');
738
+ expect(valueOf(app.service[0].name)).toBe('api');
739
+ expect(valueOf(app.bucket[0].name)).toBe('raw-data');
740
+ });
741
+ test('datalake with compaction enabled', () => {
742
+ const CONFIG = `
743
+ application "my-app" {
744
+ datalake "analytics" {
745
+ compaction = "enabled"
746
+ }
747
+ }
748
+ `;
749
+ const tokenizer = new Tokenizer(CONFIG);
750
+ const parser = new Parser(tokenizer);
751
+ const ast = parser.parse();
752
+ expect(parser.errors).toEqual([]);
753
+ const [apps, errors] = buildManifest(ast);
754
+ expect(errors).toEqual([]);
755
+ // Check the datalake properties
756
+ const dataLake = apps[0].dataLake[0];
757
+ expect(valueOf(dataLake.name)).toBe('analytics');
758
+ expect(dataLake.compaction).toBeDefined();
759
+ expect(valueOf(dataLake.compaction)).toBe('enabled');
760
+ });
761
+ test('datalake with compaction disabled', () => {
762
+ const CONFIG = `
763
+ application "my-app" {
764
+ datalake "analytics" {
765
+ compaction = "disabled"
766
+ }
767
+ }
768
+ `;
769
+ const tokenizer = new Tokenizer(CONFIG);
770
+ const parser = new Parser(tokenizer);
771
+ const ast = parser.parse();
772
+ expect(parser.errors).toEqual([]);
773
+ const [apps, errors] = buildManifest(ast);
774
+ expect(errors).toEqual([]);
775
+ // Check the datalake properties
776
+ const dataLake = apps[0].dataLake[0];
777
+ expect(valueOf(dataLake.name)).toBe('analytics');
778
+ expect(dataLake.compaction).toBeDefined();
779
+ expect(valueOf(dataLake.compaction)).toBe('disabled');
780
+ });
781
+ test('datalake with invalid compaction value', () => {
782
+ const CONFIG = `
783
+ application "my-app" {
784
+ datalake "analytics" {
785
+ compaction = "invalid"
786
+ }
787
+ }
788
+ `;
789
+ const tokenizer = new Tokenizer(CONFIG);
790
+ const parser = new Parser(tokenizer);
791
+ const ast = parser.parse();
792
+ expect(parser.errors).toEqual([]);
793
+ const [, errors] = buildManifest(ast);
794
+ // Should have one error for the invalid compaction value
795
+ expect(errors.length).toBe(1);
796
+ expect(errors[0].message).toContain('compaction must be either "enabled" or "disabled"');
797
+ });
798
+ test('site basic parsing', () => {
799
+ const CONFIG = `
800
+ application "my-app" {
801
+ site "dashboard" {
802
+ build_output = "dist"
803
+ }
804
+ }
805
+ `;
806
+ const tokenizer = new Tokenizer(CONFIG);
807
+ const parser = new Parser(tokenizer);
808
+ const ast = parser.parse();
809
+ expect(parser.errors).toEqual([]);
810
+ const [apps, errors] = buildManifest(ast);
811
+ expect(errors).toEqual([]);
812
+ expect(apps.length).toBe(1);
813
+ expect(apps[0].site.length).toBe(1);
814
+ const site = apps[0].site[0];
815
+ expect(valueOf(site.name)).toBe('dashboard');
816
+ expect(valueOf(site.buildOutput)).toBe('dist');
817
+ expect(site.buildCommand).toBeUndefined();
818
+ expect(site.spa).toBeUndefined();
819
+ expect(site.visibility).toBeUndefined();
820
+ });
821
+ test('site with all attributes', () => {
822
+ const CONFIG = `
823
+ application "my-app" {
824
+ site "dashboard" {
825
+ build_output = "dist"
826
+ build_command = "npm run build"
827
+ spa = true
828
+ visibility = "public"
829
+ }
830
+ }
831
+ `;
832
+ const tokenizer = new Tokenizer(CONFIG);
833
+ const parser = new Parser(tokenizer);
834
+ const ast = parser.parse();
835
+ expect(parser.errors).toEqual([]);
836
+ const [apps, errors] = buildManifest(ast);
837
+ expect(errors).toEqual([]);
838
+ const site = apps[0].site[0];
839
+ expect(valueOf(site.name)).toBe('dashboard');
840
+ expect(valueOf(site.buildOutput)).toBe('dist');
841
+ expect(valueOf(site.buildCommand)).toBe('npm run build');
842
+ expect(valueOf(site.spa)).toBe(true);
843
+ expect(valueOf(site.visibility)).toBe('public');
844
+ });
845
+ test('site with domain and route', () => {
846
+ const CONFIG = `
847
+ application "my-app" {
848
+ site "dashboard" {
849
+ build_output = "dist"
850
+
851
+ domain {
852
+ cname = "mysite"
853
+ }
854
+
855
+ route {
856
+ zone = "example.com"
857
+ domain = "example.com"
858
+ }
859
+ }
860
+ }
861
+ `;
862
+ const tokenizer = new Tokenizer(CONFIG);
863
+ const parser = new Parser(tokenizer);
864
+ const ast = parser.parse();
865
+ expect(parser.errors).toEqual([]);
866
+ const [apps, errors] = buildManifest(ast);
867
+ expect(errors).toEqual([]);
868
+ const site = apps[0].site[0];
869
+ expect(site.domains.length).toBe(1);
870
+ expect(valueOf(site.domains[0].cname)).toBe('mysite');
871
+ expect(site.routes.length).toBe(1);
872
+ expect(valueOf(site.routes[0].zone)).toBe('example.com');
873
+ });
874
+ test('site with env', () => {
875
+ const CONFIG = `
876
+ application "my-app" {
877
+ site "dashboard" {
878
+ build_output = "dist"
879
+ env "API_URL" {
880
+ default = "https://api.example.com"
881
+ }
882
+ }
883
+ }
884
+ `;
885
+ const tokenizer = new Tokenizer(CONFIG);
886
+ const parser = new Parser(tokenizer);
887
+ const ast = parser.parse();
888
+ expect(parser.errors).toEqual([]);
889
+ const [apps, errors] = buildManifest(ast);
890
+ expect(errors).toEqual([]);
891
+ const site = apps[0].site[0];
892
+ expect(site.env.length).toBe(1);
893
+ expect(valueOf(site.env[0].name)).toBe('API_URL');
894
+ });
895
+ test('site rejects binding stanza', () => {
896
+ const CONFIG = `
897
+ application "my-app" {
898
+ site "dashboard" {
899
+ build_output = "dist"
900
+ binding {
901
+ FOO = "bar"
902
+ }
903
+ }
904
+ }
905
+ `;
906
+ const tokenizer = new Tokenizer(CONFIG);
907
+ const parser = new Parser(tokenizer);
908
+ const ast = parser.parse();
909
+ expect(parser.errors).toEqual([]);
910
+ const [, errors] = buildManifest(ast);
911
+ expect(errors.length).toBe(1);
912
+ expect(errors[0].message).toContain('unexpected stanza');
913
+ });
914
+ test('multiple sites', () => {
915
+ const CONFIG = `
916
+ application "my-app" {
917
+ site "dashboard" {
918
+ build_output = "dashboard/dist"
919
+ }
920
+ site "marketing" {
921
+ build_output = "marketing/dist"
922
+ spa = true
923
+ }
924
+ }
925
+ `;
926
+ const tokenizer = new Tokenizer(CONFIG);
927
+ const parser = new Parser(tokenizer);
928
+ const ast = parser.parse();
929
+ expect(parser.errors).toEqual([]);
930
+ const [apps, errors] = buildManifest(ast);
931
+ expect(errors).toEqual([]);
932
+ expect(apps[0].site.length).toBe(2);
933
+ expect(valueOf(apps[0].site[0].name)).toBe('dashboard');
934
+ expect(valueOf(apps[0].site[1].name)).toBe('marketing');
935
+ });
936
+ test('site included in handlers', () => {
937
+ const CONFIG = `
938
+ application "my-app" {
939
+ service "api" {}
940
+ site "dashboard" {
941
+ build_output = "dist"
942
+ }
943
+ }
944
+ `;
945
+ const tokenizer = new Tokenizer(CONFIG);
946
+ const parser = new Parser(tokenizer);
947
+ const ast = parser.parse();
948
+ expect(parser.errors).toEqual([]);
949
+ const [apps, errors] = buildManifest(ast);
950
+ expect(errors).toEqual([]);
951
+ const handlers = apps[0].handlers();
952
+ expect(handlers.length).toBe(2);
953
+ expect(handlers.some(h => valueOf(h.name) === 'dashboard')).toBe(true);
954
+ expect(handlers.some(h => valueOf(h.name) === 'api')).toBe(true);
955
+ });
956
+ test('site with unexpected assignment', () => {
957
+ const CONFIG = `
958
+ application "my-app" {
959
+ site "dashboard" {
960
+ build_output = "dist"
961
+ invalid_field = "oops"
962
+ }
963
+ }
964
+ `;
965
+ const tokenizer = new Tokenizer(CONFIG);
966
+ const parser = new Parser(tokenizer);
967
+ const ast = parser.parse();
968
+ expect(parser.errors).toEqual([]);
969
+ const [, errors] = buildManifest(ast);
970
+ expect(errors.length).toBe(1);
971
+ expect(errors[0].message).toContain('unexpected assignment');
972
+ });
973
+ test('site with duplicate build_output', () => {
974
+ const CONFIG = `
975
+ application "my-app" {
976
+ site "dashboard" {
977
+ build_output = "dist"
978
+ build_output = "build"
979
+ }
980
+ }
981
+ `;
982
+ const tokenizer = new Tokenizer(CONFIG);
983
+ const parser = new Parser(tokenizer);
984
+ const ast = parser.parse();
985
+ expect(parser.errors).toEqual([]);
986
+ const [, errors] = buildManifest(ast);
987
+ expect(errors.length).toBe(1);
988
+ expect(errors[0].message).toContain('duplicate');
989
+ });
@@ -1,4 +1,4 @@
1
- import { Actor, Application, Binding, Bucket, ConfigObject, Domain, Env, Observer, Queue, Service, SqlDatabase, Task, VectorIndex } from './build.js';
1
+ import { Actor, Application, Binding, Bucket, ConfigObject, DataLake, Domain, Env, Observer, Queue, Service, Site, SqlDatabase, Task, VectorIndex } from './build.js';
2
2
  export type ValidationError = ConfigObject & {
3
3
  message: string;
4
4
  severity: 'info' | 'error' | 'warning';
@@ -17,6 +17,8 @@ export type Validator = {
17
17
  onDomain?: On<Domain>;
18
18
  onSqlDatabase?: On<SqlDatabase>;
19
19
  onVectorIndex?: On<VectorIndex>;
20
+ onDataLake?: On<DataLake>;
21
+ onSite?: On<Site>;
20
22
  };
21
23
  export declare function validate(apps: Application[], validators: Validator[]): Promise<ValidationError[]>;
22
24
  export declare const VALIDATORS: Validator[];
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/appify/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,WAAW,EACX,OAAO,EACP,MAAM,EACN,YAAY,EACZ,MAAM,EACN,GAAG,EACH,QAAQ,EACR,KAAK,EACL,OAAO,EACP,WAAW,EACX,IAAI,EAIJ,WAAW,EAEZ,MAAM,YAAY,CAAC;AAOpB,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;AAE7E,MAAM,MAAM,SAAS,GAAG;IACtB,aAAa,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACxB,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACpB,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACpB,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,aAAa,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;CACjC,CAAC;AAcF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAiBvG;AA2fD,eAAO,MAAM,UAAU,EAAE,SAAS,EAcjC,CAAC"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/appify/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,WAAW,EACX,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,GAAG,EACH,QAAQ,EACR,KAAK,EACL,OAAO,EACP,IAAI,EACJ,WAAW,EACX,IAAI,EAIJ,WAAW,EAEZ,MAAM,YAAY,CAAC;AAOpB,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;AAE7E,MAAM,MAAM,SAAS,GAAG;IACtB,aAAa,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACxB,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACpB,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACpB,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,aAAa,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;CACnB,CAAC;AAcF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAmBvG;AAoiBD,eAAO,MAAM,UAAU,EAAE,SAAS,EAejC,CAAC"}