@liquidmetal-ai/drizzle 0.0.4 → 0.1.1

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 (56) hide show
  1. package/.changeset/slow-guests-stare.md +7 -0
  2. package/.changeset/tasty-tigers-wash.md +6 -0
  3. package/.turbo/turbo-build.log +1 -1
  4. package/.turbo/turbo-lint.log +1 -1
  5. package/.turbo/turbo-test.log +211 -0
  6. package/dist/appify/build.d.ts +1 -0
  7. package/dist/appify/build.d.ts.map +1 -1
  8. package/dist/appify/build.js +4 -3
  9. package/dist/appify/build.test.js +1 -3
  10. package/dist/appify/index.test.js +2 -2
  11. package/dist/appify/parse.test.js +0 -1
  12. package/dist/appify/validate.d.ts.map +1 -1
  13. package/dist/appify/validate.js +34 -7
  14. package/dist/appify/validate.test.js +119 -26
  15. package/dist/codestore.d.ts +40 -0
  16. package/dist/codestore.d.ts.map +1 -1
  17. package/dist/codestore.js +15 -0
  18. package/dist/liquidmetal/v1alpha1/catalog_connect.d.ts +12 -12
  19. package/dist/liquidmetal/v1alpha1/catalog_connect.d.ts.map +1 -1
  20. package/dist/liquidmetal/v1alpha1/catalog_connect.js +12 -12
  21. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts +119 -77
  22. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts.map +1 -1
  23. package/dist/liquidmetal/v1alpha1/catalog_pb.js +177 -107
  24. package/dist/raindrop/index.d.ts +2 -0
  25. package/dist/raindrop/index.d.ts.map +1 -0
  26. package/dist/raindrop/index.js +4 -0
  27. package/dist/raindrop/index.test.d.ts +2 -0
  28. package/dist/raindrop/index.test.d.ts.map +1 -0
  29. package/dist/raindrop/index.test.js +5 -0
  30. package/dist/unsafe/codestore.d.ts +5 -0
  31. package/dist/unsafe/codestore.d.ts.map +1 -1
  32. package/dist/unsafe/codestore.js +5 -1
  33. package/dist/unsafe/framework.d.ts +11 -0
  34. package/dist/unsafe/framework.d.ts.map +1 -0
  35. package/dist/unsafe/framework.js +96 -0
  36. package/dist/unsafe/framework.test.d.ts +2 -0
  37. package/dist/unsafe/framework.test.d.ts.map +1 -0
  38. package/dist/unsafe/framework.test.js +175 -0
  39. package/eslint.config.mjs +1 -2
  40. package/package.json +1 -1
  41. package/src/appify/build.test.ts +1 -3
  42. package/src/appify/build.ts +4 -3
  43. package/src/appify/index.test.ts +2 -2
  44. package/src/appify/parse.test.ts +0 -1
  45. package/src/appify/validate.test.ts +123 -26
  46. package/src/appify/validate.ts +39 -7
  47. package/src/codestore.ts +40 -1
  48. package/src/liquidmetal/v1alpha1/catalog_connect.ts +12 -12
  49. package/src/liquidmetal/v1alpha1/catalog_pb.ts +213 -127
  50. package/src/raindrop/index.test.ts +6 -0
  51. package/src/raindrop/index.ts +4 -0
  52. package/src/unsafe/codestore.ts +7 -3
  53. package/src/unsafe/framework.test.ts +205 -0
  54. package/src/unsafe/framework.ts +113 -0
  55. package/tsconfig.json +3 -9
  56. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,7 @@
1
+ ---
2
+ '@liquidmetal-ai/drizzle': minor
3
+ '@liquidmetal-ai/raindrop': minor
4
+ '@liquidmetal-ai/raindrop-framework': minor
5
+ ---
6
+
7
+ Releasing runtime
@@ -0,0 +1,6 @@
1
+ ---
2
+ '@liquidmetal-ai/drizzle': patch
3
+ '@liquidmetal-ai/raindrop-framework': patch
4
+ ---
5
+
6
+ Fix potentially bad release
@@ -1,6 +1,6 @@
1
1
 
2
2
  
3
- > @liquidmetal-ai/drizzle@0.0.1 build
3
+ > @liquidmetal-ai/drizzle@0.0.4 build
4
4
  > shx rm -rf dist && tsc -b
5
5
 
6
6
  ⠙
@@ -1,6 +1,6 @@
1
1
 
2
2
  
3
- > @liquidmetal-ai/drizzle@0.0.2 lint
3
+ > @liquidmetal-ai/drizzle@0.0.4 lint
4
4
  > eslint . --max-warnings=0
5
5
 
6
6
  ⠙
@@ -0,0 +1,211 @@
1
+
2
+ 
3
+ > @liquidmetal-ai/drizzle@0.0.4 test
4
+ > vitest run
5
+
6
+ 
7
+  RUN  v2.1.1 /Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle
8
+
9
+ [?25l · src/appify/parse.test.ts (15)
10
+ · src/appify/build.test.ts (2)
11
+ [?25l · src/appify/parse.test.ts (15)
12
+ ✓ src/appify/build.test.ts (2)
13
+ [?25l ✓ src/appify/parse.test.ts (15)
14
+ ✓ src/appify/build.test.ts (2)
15
+ [?25l[?25l[?25l[?25l[?25l[?25l[?25l · src/appify/validate.test.ts (14)
16
+ ✓ src/appify/parse.test.ts (15)
17
+ ✓ src/appify/build.test.ts (2)
18
+ [?25l · src/appify/validate.test.ts (14)
19
+ · src/unsafe/framework.test.ts (7)
20
+ ✓ src/appify/parse.test.ts (15)
21
+ ✓ src/appify/build.test.ts (2)
22
+ [?25l[?25l[?25l · src/appify/validate.test.ts (14)
23
+ ❯ src/unsafe/framework.test.ts (7)
24
+ ❯ getPackageVersion (7)
25
+ ⠙ should detect npm package version
26
+ · should detect yarn package version
27
+ · should detect pnpm package version
28
+ · should handle nested dependencies
29
+ · should return null when package is not found
30
+ · should search parent directories for package manager files
31
+ · should handle command execution errors
32
+ ✓ src/appify/parse.test.ts (15)
33
+ · src/codestore.test.ts (9)
34
+ ✓ src/appify/build.test.ts (2)
35
+ · src/unsafe/codestore.test.ts (1)
36
+ [?25l · src/appify/validate.test.ts (14)
37
+ ❯ src/unsafe/framework.test.ts (7)
38
+ ❯ getPackageVersion (7)
39
+ ⠹ should detect npm package version
40
+ · should detect yarn package version
41
+ · should detect pnpm package version
42
+ · should handle nested dependencies
43
+ · should return null when package is not found
44
+ · should search parent directories for package manager files
45
+ · should handle command execution errors
46
+ ✓ src/appify/parse.test.ts (15)
47
+ ❯ src/codestore.test.ts (9)
48
+ ⠙ archive and unarchive
49
+ · list bundle with files
50
+ · read file from bundle
51
+ · read missing file from bundle
52
+ · delete file from bundle
53
+ · for await of bundle
54
+ · stat file from bundle
55
+ · stat missing file from bundle
56
+ · hash bundle
57
+ ✓ src/appify/build.test.ts (2)
58
+ ❯ src/unsafe/codestore.test.ts (1)
59
+ ⠙ FileSystemBundle maps to local files and their contents
60
+ stderr | src/unsafe/framework.test.ts > getPackageVersion > should return null when package is not found
61
+ Error reading package version: Error: Package version not found
62
+ at Module.getPackageVersion (/Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle/src/unsafe/framework.ts:108:11)
63
+ at /Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle/src/unsafe/framework.test.ts:151:21
64
+ at file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:529:5
65
+ at runTest (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:982:11)
66
+ at runSuite (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:1131:15)
67
+ at runSuite (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:1131:15)
68
+ at runFiles (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:1188:5)
69
+ at startTests (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:1197:3)
70
+ at file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/vitest/dist/chunks/runBaseTests.9YDrdSI4.js:130:11
71
+ at withEnv (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/vitest/dist/chunks/runBaseTests.9YDrdSI4.js:94:5)
72
+
73
+ [?25l ✓ src/appify/validate.test.ts (14)
74
+ ❯ src/unsafe/framework.test.ts (7)
75
+ ❯ getPackageVersion (7)
76
+ ⠸ should detect npm package version
77
+ · should detect yarn package version
78
+ · should detect pnpm package version
79
+ · should handle nested dependencies
80
+ · should return null when package is not found
81
+ · should search parent directories for package manager files
82
+ · should handle command execution errors
83
+ ✓ src/appify/parse.test.ts (15)
84
+ ❯ src/codestore.test.ts (9)
85
+ ⠹ archive and unarchive
86
+ · list bundle with files
87
+ · read file from bundle
88
+ · read missing file from bundle
89
+ · delete file from bundle
90
+ · for await of bundle
91
+ · stat file from bundle
92
+ · stat missing file from bundle
93
+ · hash bundle
94
+ ✓ src/appify/build.test.ts (2)
95
+ ❯ src/unsafe/codestore.test.ts (1)
96
+ ⠹ FileSystemBundle maps to local files and their contents
97
+ stderr | src/unsafe/framework.test.ts > getPackageVersion > should handle command execution errors
98
+ Error executing npm list command: Error: Command failed
99
+ at /Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle/src/unsafe/framework.test.ts:192:9
100
+ at mockCall (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/vitest/node_modules/@vitest/spy/dist/index.js:61:17)
101
+ at spy (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/tinyspy/dist/index.js:45:80)
102
+  at node:internal/util:447:21
103
+ at new Promise (<anonymous>)
104
+  at spy (node:internal/util:433:12)
105
+ at getVersionFromCommand (/Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle/src/unsafe/framework.ts:69:30)
106
+ at Module.getPackageVersion (/Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle/src/unsafe/framework.ts:102:31)
107
+ at /Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle/src/unsafe/framework.test.ts:202:21
108
+ at file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:529:5
109
+
110
+ [?25l ✓ src/appify/validate.test.ts (14)
111
+ ❯ src/unsafe/framework.test.ts (7)
112
+ ❯ getPackageVersion (7)
113
+ ✓ should detect npm package version
114
+ ✓ should detect yarn package version
115
+ ✓ should detect pnpm package version
116
+ ✓ should handle nested dependencies
117
+ ✓ should return null when package is not found
118
+ ⠙ should search parent directories for package manager files
119
+ · should handle command execution errors
120
+ ✓ src/appify/parse.test.ts (15)
121
+ ❯ src/codestore.test.ts (9)
122
+ ⠸ archive and unarchive
123
+ · list bundle with files
124
+ · read file from bundle
125
+ · read missing file from bundle
126
+ · delete file from bundle
127
+ · for await of bundle
128
+ · stat file from bundle
129
+ · stat missing file from bundle
130
+ · hash bundle
131
+ ✓ src/appify/build.test.ts (2)
132
+ ✓ src/unsafe/codestore.test.ts (1)
133
+ stderr | src/unsafe/framework.test.ts > getPackageVersion > should handle command execution errors
134
+ Error reading package version: Error: Package version not found
135
+ at Module.getPackageVersion (/Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle/src/unsafe/framework.ts:108:11)
136
+ at /Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/packages/drizzle/src/unsafe/framework.test.ts:202:21
137
+ at file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:529:5
138
+ at runTest (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:982:11)
139
+ at runSuite (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:1131:15)
140
+ at runSuite (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:1131:15)
141
+ at runFiles (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:1188:5)
142
+ at startTests (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/@vitest/runner/dist/index.js:1197:3)
143
+ at file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/vitest/dist/chunks/runBaseTests.9YDrdSI4.js:130:11
144
+ at withEnv (file:///Users/bosgood/dev/src/github.com/LiquidMetal-AI/liquidmetal/node_modules/vitest/dist/chunks/runBaseTests.9YDrdSI4.js:94:5)
145
+
146
+ [?25l ✓ src/appify/validate.test.ts (14)
147
+ ✓ src/unsafe/framework.test.ts (7)
148
+ ✓ src/appify/parse.test.ts (15)
149
+ ❯ src/codestore.test.ts (9)
150
+ ⠼ archive and unarchive
151
+ · list bundle with files
152
+ · read file from bundle
153
+ · read missing file from bundle
154
+ · delete file from bundle
155
+ · for await of bundle
156
+ · stat file from bundle
157
+ · stat missing file from bundle
158
+ · hash bundle
159
+ ✓ src/appify/build.test.ts (2)
160
+ ✓ src/unsafe/codestore.test.ts (1)
161
+ [?25l ✓ src/appify/validate.test.ts (14)
162
+ ✓ src/unsafe/framework.test.ts (7)
163
+ ✓ src/appify/parse.test.ts (15)
164
+ ✓ src/codestore.test.ts (9)
165
+ ✓ src/appify/build.test.ts (2)
166
+ ✓ src/unsafe/codestore.test.ts (1)
167
+ [?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l ✓ src/appify/validate.test.ts (14)
168
+ ✓ src/unsafe/framework.test.ts (7)
169
+ ✓ src/appify/parse.test.ts (15)
170
+ ✓ src/codestore.test.ts (9)
171
+ ✓ src/appify/build.test.ts (2)
172
+ · src/appify/index.test.ts (3)
173
+ ✓ src/unsafe/codestore.test.ts (1)
174
+ [?25l ✓ src/appify/validate.test.ts (14)
175
+ ✓ src/unsafe/framework.test.ts (7)
176
+ ✓ src/appify/parse.test.ts (15)
177
+ ✓ src/codestore.test.ts (9)
178
+ ✓ src/appify/build.test.ts (2)
179
+ ✓ src/appify/index.test.ts (3)
180
+ ✓ src/unsafe/codestore.test.ts (1)
181
+ [?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l[?25l ✓ src/appify/validate.test.ts (14)
182
+ ✓ src/unsafe/framework.test.ts (7)
183
+ ✓ src/appify/parse.test.ts (15)
184
+ ✓ src/codestore.test.ts (9)
185
+ ✓ src/appify/build.test.ts (2)
186
+ ✓ src/appify/index.test.ts (3)
187
+ ✓ src/unsafe/codestore.test.ts (1)
188
+ ✓ src/raindrop/index.test.ts (1)
189
+  ✓ src/codestore.test.ts (9)
190
+ ✓ src/appify/build.test.ts (2)
191
+ ✓ src/appify/index.test.ts (3)
192
+ ✓ src/appify/parse.test.ts (15)
193
+ ✓ src/appify/validate.test.ts (14)
194
+ ✓ src/raindrop/index.test.ts (1)
195
+ ✓ src/unsafe/codestore.test.ts (1)
196
+ ✓ src/unsafe/framework.test.ts (7)
197
+
198
+  Test Files  8 passed (8)
199
+  Tests  52 passed (52)
200
+  Start at  18:26:33
201
+  Duration  5.88s (transform 3.35s, setup 0ms, collect 7.85s, tests 702ms, environment 1ms, prepare 6.03s)
202
+
203
+ [?25h[?25h⠙
204
+ > @liquidmetal-ai/drizzle@0.0.4 posttest
205
+ > npm run lint
206
+
207
+ ⠙
208
+ > @liquidmetal-ai/drizzle@0.0.4 lint
209
+ > eslint . --max-warnings=0
210
+
211
+ ⠙⠙
@@ -83,6 +83,7 @@ export declare class Route {
83
83
  }
84
84
  export declare class Domain {
85
85
  obj: ConfigObject;
86
+ cname?: TokenString;
86
87
  fqdn?: TokenString;
87
88
  constructor(obj: ConfigObject);
88
89
  }
@@ -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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"}
@@ -305,9 +305,6 @@ function buildSqlDatabase(stanza) {
305
305
  case 'visibility':
306
306
  buildAssignment(sqlDatabase, 'visibility', 'string', child, errors);
307
307
  break;
308
- case 'schema':
309
- buildAssignment(sqlDatabase, 'schema', 'string', child, errors);
310
- break;
311
308
  default:
312
309
  errors.push({ message: 'unexpected assignment', ...child });
313
310
  }
@@ -499,6 +496,9 @@ function buildDomain(stanza) {
499
496
  for (const child of stanza.block?.children ?? []) {
500
497
  if (child.type === 'assignment') {
501
498
  switch (child.key.value) {
499
+ case 'cname':
500
+ buildAssignment(domain, 'cname', 'string', child, errors);
501
+ break;
502
502
  case 'fqdn':
503
503
  buildAssignment(domain, 'fqdn', 'string', child, errors);
504
504
  break;
@@ -638,6 +638,7 @@ export class Route {
638
638
  }
639
639
  export class Domain {
640
640
  obj;
641
+ cname;
641
642
  fqdn;
642
643
  constructor(obj) {
643
644
  this.obj = obj;
@@ -59,9 +59,7 @@ application "my-app" {
59
59
  visibility = 'application'
60
60
  }
61
61
 
62
- sql_database "my-database" {
63
- schema = "my-schema.sql"
64
- }
62
+ sql_database "my-database" {}
65
63
 
66
64
  vector_index "my-index" {
67
65
  dimension = 768
@@ -26,8 +26,8 @@ test('mustManifestFromString with warnings', async () => {
26
26
  const manifest = `
27
27
  application "app" {
28
28
  service "svc" {
29
- domain {
30
- fqdn = "bad_domain_name"
29
+ env "not_uppercase" {
30
+ default = "not_uppercase"
31
31
  }
32
32
  }
33
33
  }
@@ -231,7 +231,6 @@ application "my-app" {
231
231
  `);
232
232
  const parser = new Parser(tokenizer);
233
233
  parser.parse();
234
- console.log(parser.errors);
235
234
  expect(parser.errors).toHaveLength(1);
236
235
  });
237
236
  test('unclosed array', () => {
@@ -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,EAEX,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,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,CAgBvG;AA8WD,eAAO,MAAM,UAAU,EAAE,SAAS,EASjC,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,MAAM,EACN,GAAG,EACH,QAAQ,EACR,KAAK,EACL,OAAO,EACP,WAAW,EAEX,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,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,CAgBvG;AA6YD,eAAO,MAAM,UAAU,EAAE,SAAS,EAUjC,CAAC"}
@@ -128,22 +128,48 @@ const bindingValueValidator = {
128
128
  return errors;
129
129
  },
130
130
  };
131
- // Disabled for now.
132
- const _domainValidator = {
131
+ const VALIDATE_DOMAIN_PATTERN = /^[a-z0-9]+([-.]{1}[a-z0-9]+)*\.[a-z]{2,6}$/;
132
+ const FQDN_MAX_LENGTH = 63;
133
+ const CNAME_MAX_LENGTH = 63 - `.01abcdefghijklmnopqrstuvwx.lmapp.run`.length;
134
+ const domainValidator = {
133
135
  onDomain: async (app, domain) => {
134
136
  const errors = [];
135
- if (domain.fqdn === undefined) {
137
+ if (domain.cname == undefined && domain.fqdn === undefined) {
136
138
  errors.push({
137
- message: 'domain must have an fqdn',
139
+ message: 'domain must have either a cname or fqdn attribute',
138
140
  severity: 'error',
139
141
  ...domain.obj,
140
142
  });
143
+ return errors;
141
144
  }
142
- else if (!/^[a-z0-9]+([-.]{1}[a-z0-9]+)*\.[a-z]{2,6}$/.test(valueOf(domain.fqdn))) {
145
+ if (domain.fqdn !== undefined &&
146
+ valueOf(domain.fqdn).indexOf('${') === -1 &&
147
+ !VALIDATE_DOMAIN_PATTERN.test(valueOf(domain.fqdn))) {
143
148
  errors.push({
144
149
  message: `domain ${domain.fqdn.value} is an invalid domain name`,
145
- severity: 'warning',
146
- ...domain.fqdn,
150
+ severity: 'error',
151
+ ...domain.obj,
152
+ });
153
+ }
154
+ if (domain.cname !== undefined && !VALIDATE_DOMAIN_PATTERN.test(`${valueOf(domain.cname)}.example.com`)) {
155
+ errors.push({
156
+ message: `domain ${domain.cname.value} is an invalid subdomain name`,
157
+ severity: 'error',
158
+ ...domain.obj,
159
+ });
160
+ }
161
+ if (domain.cname !== undefined && valueOf(domain.cname).length > CNAME_MAX_LENGTH) {
162
+ errors.push({
163
+ message: `domain.cname ${domain.fqdn} is too long, maximum ${CNAME_MAX_LENGTH} characters`,
164
+ severity: 'error',
165
+ ...domain.obj,
166
+ });
167
+ }
168
+ if (domain.fqdn !== undefined && valueOf(domain.fqdn).length > FQDN_MAX_LENGTH) {
169
+ errors.push({
170
+ message: `domain.fqdn ${domain.fqdn} is too long, maximum ${FQDN_MAX_LENGTH} characters`,
171
+ severity: 'error',
172
+ ...domain.obj,
147
173
  });
148
174
  }
149
175
  return errors;
@@ -348,6 +374,7 @@ const duplicateModuleValidator = {
348
374
  export const VALIDATORS = [
349
375
  bindingNameValidator,
350
376
  bindingValueValidator,
377
+ domainValidator,
351
378
  envValidator,
352
379
  observerSourceValidator,
353
380
  visibilityValidator,
@@ -52,32 +52,125 @@ application "my-app" {
52
52
  },
53
53
  ]);
54
54
  });
55
- // test('domainValidator', async () => {
56
- // const manifest = `
57
- // application "my-app" {
58
- // service "my-service" {
59
- // domain {
60
- // fqdn = "not-valid.com_foo"
61
- // }
62
- // }
63
- // }
64
- // `;
65
- // const tokenizer = new Tokenizer(manifest);
66
- // const parser = new Parser(tokenizer);
67
- // const parsedManifest = parser.parse();
68
- // const [builtApps] = buildManifest(parsedManifest);
69
- // const validateErrors = await validate(builtApps, VALIDATORS);
70
- // expect(validateErrors).toMatchObject([
71
- // {
72
- // message: 'domain "not-valid.com_foo" is an invalid domain name',
73
- // line: 5,
74
- // column: 14,
75
- // start: 75,
76
- // end: 94,
77
- // severity: 'warning',
78
- // },
79
- // ]);
80
- // });
55
+ test('domainValidator ensures domain.fqdn is valid', async () => {
56
+ const manifest = `
57
+ application "my-app" {
58
+ service "my-service" {
59
+ domain {
60
+ fqdn = "not-valid.com_foo"
61
+ }
62
+ }
63
+ }
64
+ `;
65
+ const tokenizer = new Tokenizer(manifest);
66
+ const parser = new Parser(tokenizer);
67
+ const parsedManifest = parser.parse();
68
+ const [builtApps] = buildManifest(parsedManifest);
69
+ const validateErrors = await validate(builtApps, VALIDATORS);
70
+ expect(validateErrors).toMatchObject([
71
+ {
72
+ message: 'domain "not-valid.com_foo" is an invalid domain name',
73
+ line: 4,
74
+ column: 5,
75
+ start: 53,
76
+ end: 100,
77
+ severity: 'error',
78
+ },
79
+ ]);
80
+ });
81
+ test('domainValidator ensures domain.fqdn is valid but ignores variable interpolation', async () => {
82
+ const manifest = `
83
+ application "my-app" {
84
+ service "my-service" {
85
+ domain {
86
+ fqdn = "$\{MY_SERVICES_EXAMPLE_URL}"
87
+ }
88
+ }
89
+ }
90
+ `;
91
+ const tokenizer = new Tokenizer(manifest);
92
+ const parser = new Parser(tokenizer);
93
+ const parsedManifest = parser.parse();
94
+ const [builtApps] = buildManifest(parsedManifest);
95
+ const validateErrors = await validate(builtApps, VALIDATORS);
96
+ expect(validateErrors).toEqual([]);
97
+ });
98
+ test('domainValidator ensures either a cname or fqdn present', async () => {
99
+ const manifest = `
100
+ application "my-app" {
101
+ service "my-service" {
102
+ domain {}
103
+ }
104
+ }
105
+ `;
106
+ const tokenizer = new Tokenizer(manifest);
107
+ const parser = new Parser(tokenizer);
108
+ const parsedManifest = parser.parse();
109
+ const [builtApps] = buildManifest(parsedManifest);
110
+ const validateErrors = await validate(builtApps, VALIDATORS);
111
+ expect(validateErrors).toMatchObject([
112
+ {
113
+ message: 'domain must have either a cname or fqdn attribute',
114
+ line: 4,
115
+ column: 5,
116
+ start: 53,
117
+ end: 62,
118
+ severity: 'error',
119
+ },
120
+ ]);
121
+ });
122
+ test('domainValidator ensures ensures domain.cname is valid', async () => {
123
+ const manifest = `
124
+ application "my-app" {
125
+ service "my-service" {
126
+ domain {
127
+ cname = "my_cname"
128
+ }
129
+ }
130
+ }
131
+ `;
132
+ const tokenizer = new Tokenizer(manifest);
133
+ const parser = new Parser(tokenizer);
134
+ const parsedManifest = parser.parse();
135
+ const [builtApps] = buildManifest(parsedManifest);
136
+ const validateErrors = await validate(builtApps, VALIDATORS);
137
+ expect(validateErrors).toMatchObject([
138
+ {
139
+ message: 'domain "my_cname" is an invalid subdomain name',
140
+ line: 4,
141
+ column: 5,
142
+ start: 53,
143
+ end: 92,
144
+ severity: 'error',
145
+ },
146
+ ]);
147
+ });
148
+ test('domainValidator validates domain.cname does not exceed the maximum length', async () => {
149
+ const manifest = `
150
+ application "my-app" {
151
+ service "my-service" {
152
+ domain {
153
+ cname = "really-long-cname-that-is-invalid-because-it-is-too-long"
154
+ }
155
+ }
156
+ }
157
+ `;
158
+ const tokenizer = new Tokenizer(manifest);
159
+ const parser = new Parser(tokenizer);
160
+ const parsedManifest = parser.parse();
161
+ const [builtApps] = buildManifest(parsedManifest);
162
+ const validateErrors = await validate(builtApps, VALIDATORS);
163
+ expect(validateErrors).toMatchObject([
164
+ {
165
+ message: 'domain.cname undefined is too long, maximum 26 characters',
166
+ line: 4,
167
+ column: 5,
168
+ start: 53,
169
+ end: 140,
170
+ severity: 'error',
171
+ },
172
+ ]);
173
+ });
81
174
  test('visibilityValidator', async () => {
82
175
  const manifest = `
83
176
  application "my-app" {
@@ -1,10 +1,23 @@
1
+ /**
2
+ * CodeStore represents a collection of code bundles mapped by handler names
3
+ * Used to organize and manage multiple code bundles in a single namespace
4
+ */
1
5
  export interface CodeStore {
2
6
  [key: string]: Bundle;
3
7
  }
8
+ /**
9
+ * Statistics about a file in a bundle
10
+ * Includes size and cryptographic hash information
11
+ */
4
12
  export interface Stat {
5
13
  sizeBytes: number;
6
14
  sha256Hex: string;
7
15
  }
16
+ /**
17
+ * Interface for read-only access to a bundle of files
18
+ * Provides methods to list, read, and get statistics about files
19
+ * Also supports async iteration over files
20
+ */
8
21
  export interface ReadableBundle {
9
22
  list(): Promise<string[]>;
10
23
  read(name: string): Promise<Buffer>;
@@ -12,16 +25,33 @@ export interface ReadableBundle {
12
25
  [Symbol.asyncIterator](): AsyncGenerator<File>;
13
26
  hash(): Promise<string>;
14
27
  }
28
+ /**
29
+ * Interface for write operations on a bundle of files
30
+ * Provides methods to write and delete files
31
+ */
15
32
  export interface WritableBundle {
16
33
  write(name: string, content: Buffer): Promise<void>;
17
34
  delete(name: string): Promise<void>;
18
35
  }
36
+ /**
37
+ * Complete interface for a bundle of files
38
+ * Combines both read and write operations
39
+ */
19
40
  export type Bundle = ReadableBundle & WritableBundle;
41
+ /**
42
+ * Represents a single file within a bundle
43
+ * Provides methods to read the file's contents and get its statistics
44
+ */
20
45
  export interface File {
21
46
  name: string;
22
47
  read(): Promise<Buffer>;
23
48
  stat(): Promise<Stat>;
24
49
  }
50
+ /**
51
+ * Base implementation of ReadableBundle
52
+ * Provides default implementations for stat(), hash() and async iteration
53
+ * Concrete implementations must provide list() and read() methods
54
+ */
25
55
  export declare abstract class BundleBase implements ReadableBundle {
26
56
  abstract list(): Promise<string[]>;
27
57
  abstract read(name: string): Promise<Buffer>;
@@ -29,6 +59,16 @@ export declare abstract class BundleBase implements ReadableBundle {
29
59
  [Symbol.asyncIterator](): AsyncGenerator<File>;
30
60
  hash(): Promise<string>;
31
61
  }
62
+ /**
63
+ * Creates a ZIP archive containing all files from a bundle
64
+ * @param bundle The bundle to archive
65
+ * @returns Promise resolving to the ZIP file contents as an ArrayBuffer
66
+ */
32
67
  export declare function archive(bundle: ReadableBundle): Promise<ArrayBuffer>;
68
+ /**
69
+ * Extracts files from a ZIP archive into a writable bundle
70
+ * @param zipBuffer The ZIP file contents as an ArrayBuffer
71
+ * @param bundle The target bundle to write the extracted files to
72
+ */
33
73
  export declare function unarchive(zipBuffer: ArrayBuffer, bundle: WritableBundle): Promise<void>;
34
74
  //# sourceMappingURL=codestore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codestore.d.ts","sourceRoot":"","sources":["../src/codestore.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC;AAErD,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,8BAAsB,UAAW,YAAW,cAAc;IACxD,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEtC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBhC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;IAW/C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAO9B;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAM1E;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7F"}
1
+ {"version":3,"file":"codestore.d.ts","sourceRoot":"","sources":["../src/codestore.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,8BAAsB,UAAW,YAAW,cAAc;IACxD,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEtC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBhC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;IAW/C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAO9B;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAM1E;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7F"}