@malloydata/malloy 0.0.240-dev250311202829 → 0.0.240-dev250311214430

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 (66) hide show
  1. package/dist/api/core.d.ts +1 -0
  2. package/dist/api/core.js +2 -1
  3. package/dist/lang/malloy-parse-info.d.ts +2 -10
  4. package/dist/lang/malloy-to-ast.d.ts +1 -0
  5. package/dist/lang/malloy-to-ast.js +9 -6
  6. package/dist/lang/malloy-to-stable-query.d.ts +76 -0
  7. package/dist/lang/malloy-to-stable-query.js +660 -0
  8. package/dist/lang/parse-log.d.ts +1 -0
  9. package/dist/lang/parse-malloy.d.ts +2 -9
  10. package/dist/lang/parse-malloy.js +7 -112
  11. package/dist/lang/parse-tree-walkers/model-annotation-walker.js +1 -1
  12. package/dist/lang/run-malloy-parser.d.ts +3 -0
  13. package/dist/lang/run-malloy-parser.js +53 -0
  14. package/dist/lang/syntax-errors/malloy-parser-error-listener.d.ts +4 -3
  15. package/dist/lang/syntax-errors/malloy-parser-error-listener.js +8 -4
  16. package/dist/lang/utils.d.ts +27 -1
  17. package/dist/lang/utils.js +78 -1
  18. package/package.json +3 -3
  19. package/dist/api/asynchronous.spec.d.ts +0 -1
  20. package/dist/api/asynchronous.spec.js +0 -240
  21. package/dist/api/sessioned.spec.d.ts +0 -1
  22. package/dist/api/sessioned.spec.js +0 -476
  23. package/dist/api/stateless.spec.d.ts +0 -1
  24. package/dist/api/stateless.spec.js +0 -400
  25. package/dist/lang/test/annotation.spec.d.ts +0 -14
  26. package/dist/lang/test/annotation.spec.js +0 -809
  27. package/dist/lang/test/composite-field-usage.spec.d.ts +0 -1
  28. package/dist/lang/test/composite-field-usage.spec.js +0 -261
  29. package/dist/lang/test/document-help-context-walker.spec.d.ts +0 -1
  30. package/dist/lang/test/document-help-context-walker.spec.js +0 -55
  31. package/dist/lang/test/document-symbol-walker.spec.d.ts +0 -1
  32. package/dist/lang/test/document-symbol-walker.spec.js +0 -209
  33. package/dist/lang/test/expressions.spec.d.ts +0 -1
  34. package/dist/lang/test/expressions.spec.js +0 -1181
  35. package/dist/lang/test/field-symbols.spec.d.ts +0 -1
  36. package/dist/lang/test/field-symbols.spec.js +0 -194
  37. package/dist/lang/test/find-table-path-walker.spec.d.ts +0 -1
  38. package/dist/lang/test/find-table-path-walker.spec.js +0 -50
  39. package/dist/lang/test/imports.spec.d.ts +0 -1
  40. package/dist/lang/test/imports.spec.js +0 -283
  41. package/dist/lang/test/lenses.spec.d.ts +0 -1
  42. package/dist/lang/test/lenses.spec.js +0 -384
  43. package/dist/lang/test/literals.spec.d.ts +0 -1
  44. package/dist/lang/test/literals.spec.js +0 -267
  45. package/dist/lang/test/locations.spec.d.ts +0 -1
  46. package/dist/lang/test/locations.spec.js +0 -679
  47. package/dist/lang/test/model-annotation-walker.spec.d.ts +0 -1
  48. package/dist/lang/test/model-annotation-walker.spec.js +0 -46
  49. package/dist/lang/test/model_serialization.spec.d.ts +0 -5
  50. package/dist/lang/test/model_serialization.spec.js +0 -116
  51. package/dist/lang/test/parameters.spec.d.ts +0 -1
  52. package/dist/lang/test/parameters.spec.js +0 -619
  53. package/dist/lang/test/parse.spec.d.ts +0 -1
  54. package/dist/lang/test/parse.spec.js +0 -893
  55. package/dist/lang/test/pretranslate.spec.d.ts +0 -1
  56. package/dist/lang/test/pretranslate.spec.js +0 -80
  57. package/dist/lang/test/query.spec.d.ts +0 -1
  58. package/dist/lang/test/query.spec.js +0 -1149
  59. package/dist/lang/test/source.spec.d.ts +0 -1
  60. package/dist/lang/test/source.spec.js +0 -570
  61. package/dist/lang/test/sql-block.spec.d.ts +0 -1
  62. package/dist/lang/test/sql-block.spec.js +0 -145
  63. package/dist/lang/test/syntax-errors.spec.d.ts +0 -1
  64. package/dist/lang/test/syntax-errors.spec.js +0 -142
  65. package/dist/model/utils.spec.d.ts +0 -1
  66. package/dist/model/utils.spec.js +0 -38
@@ -1,476 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) Meta Platforms, Inc. and affiliates.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const sessioned_1 = require("./sessioned");
10
- describe('api', () => {
11
- describe('compile model', () => {
12
- test('compile model with table dependency', () => {
13
- let result = (0, sessioned_1.compileModel)({
14
- model_url: 'file://test.malloy',
15
- });
16
- let expected = {
17
- compiler_needs: {
18
- files: [
19
- {
20
- url: 'file://test.malloy',
21
- },
22
- ],
23
- },
24
- };
25
- expect(result).toMatchObject(expected);
26
- result = (0, sessioned_1.compileModel)({
27
- model_url: 'file://test.malloy',
28
- compiler_needs: {
29
- files: [
30
- {
31
- url: 'file://test.malloy',
32
- contents: "source: flights is connection.table('flights')",
33
- },
34
- ],
35
- },
36
- }, { session_id: result.session_id });
37
- expected = {
38
- compiler_needs: {
39
- table_schemas: [
40
- {
41
- connection_name: 'connection',
42
- name: 'flights',
43
- },
44
- ],
45
- connections: [{ name: 'connection' }],
46
- },
47
- session_id: result.session_id,
48
- };
49
- expect(result).toMatchObject(expected);
50
- result = (0, sessioned_1.compileModel)({
51
- model_url: 'file://test.malloy',
52
- compiler_needs: {
53
- table_schemas: [
54
- {
55
- connection_name: 'connection',
56
- name: 'flights',
57
- schema: {
58
- fields: [
59
- {
60
- kind: 'dimension',
61
- name: 'carrier',
62
- type: { kind: 'string_type' },
63
- },
64
- ],
65
- },
66
- },
67
- ],
68
- connections: [{ name: 'connection', dialect: 'duckdb' }],
69
- },
70
- }, { session_id: result.session_id });
71
- expected = {
72
- model: {
73
- entries: [
74
- {
75
- kind: 'source',
76
- name: 'flights',
77
- schema: {
78
- fields: [
79
- {
80
- kind: 'dimension',
81
- name: 'carrier',
82
- type: { kind: 'string_type' },
83
- },
84
- ],
85
- },
86
- },
87
- ],
88
- anonymous_queries: [],
89
- },
90
- session_id: result.session_id,
91
- };
92
- expect(result).toMatchObject(expected);
93
- });
94
- test('compile source basic test', () => {
95
- let result = (0, sessioned_1.compileSource)({
96
- model_url: 'file://test.malloy',
97
- name: 'flights',
98
- compiler_needs: {
99
- files: [
100
- {
101
- url: 'file://test.malloy',
102
- contents: "source: flights is connection.table('flights')",
103
- },
104
- ],
105
- },
106
- });
107
- let expected = {
108
- compiler_needs: {
109
- table_schemas: [
110
- {
111
- connection_name: 'connection',
112
- name: 'flights',
113
- },
114
- ],
115
- connections: [{ name: 'connection' }],
116
- },
117
- };
118
- expect(result).toMatchObject(expected);
119
- result = (0, sessioned_1.compileSource)({
120
- model_url: 'file://test.malloy',
121
- name: 'flights',
122
- compiler_needs: {
123
- table_schemas: [
124
- {
125
- connection_name: 'connection',
126
- name: 'flights',
127
- schema: {
128
- fields: [
129
- {
130
- kind: 'dimension',
131
- name: 'carrier',
132
- type: { kind: 'string_type' },
133
- },
134
- ],
135
- },
136
- },
137
- ],
138
- connections: [{ name: 'connection', dialect: 'duckdb' }],
139
- },
140
- }, { session_id: result.session_id });
141
- expected = {
142
- source: {
143
- name: 'flights',
144
- schema: {
145
- fields: [
146
- {
147
- kind: 'dimension',
148
- name: 'carrier',
149
- type: { kind: 'string_type' },
150
- },
151
- ],
152
- },
153
- },
154
- session_id: result.session_id,
155
- };
156
- expect(result).toMatchObject(expected);
157
- });
158
- });
159
- describe('compile query', () => {
160
- test('compile query with table dependency', () => {
161
- const query = {
162
- definition: {
163
- kind: 'arrow',
164
- source_reference: { name: 'flights' },
165
- view: {
166
- kind: 'segment',
167
- operations: [
168
- {
169
- kind: 'group_by',
170
- field: {
171
- expression: { kind: 'field_reference', name: 'carrier' },
172
- },
173
- },
174
- ],
175
- },
176
- },
177
- };
178
- let result = (0, sessioned_1.compileQuery)({
179
- model_url: 'file://test.malloy',
180
- query,
181
- });
182
- let expected = {
183
- compiler_needs: {
184
- files: [
185
- {
186
- url: 'file://test.malloy',
187
- },
188
- ],
189
- },
190
- };
191
- expect(result).toMatchObject(expected);
192
- result = (0, sessioned_1.compileQuery)({
193
- model_url: 'file://test.malloy',
194
- query,
195
- compiler_needs: {
196
- files: [
197
- {
198
- url: 'file://test.malloy',
199
- contents: "source: flights is connection.table('flights')",
200
- },
201
- ],
202
- },
203
- }, { session_id: result.session_id });
204
- expected = {
205
- compiler_needs: {
206
- table_schemas: [
207
- {
208
- connection_name: 'connection',
209
- name: 'flights',
210
- },
211
- ],
212
- connections: [{ name: 'connection' }],
213
- },
214
- };
215
- expect(result).toMatchObject(expected);
216
- result = (0, sessioned_1.compileQuery)({
217
- model_url: 'file://test.malloy',
218
- query,
219
- compiler_needs: {
220
- table_schemas: [
221
- {
222
- connection_name: 'connection',
223
- name: 'flights',
224
- schema: {
225
- fields: [
226
- {
227
- kind: 'dimension',
228
- name: 'carrier',
229
- type: { kind: 'string_type' },
230
- },
231
- ],
232
- },
233
- },
234
- ],
235
- connections: [{ name: 'connection', dialect: 'duckdb' }],
236
- },
237
- }, { session_id: result.session_id });
238
- expected = {
239
- result: {
240
- connection_name: 'connection',
241
- sql: `SELECT \n\
242
- base."carrier" as "carrier"
243
- FROM flights as base
244
- GROUP BY 1
245
- ORDER BY 1 asc NULLS LAST
246
- `,
247
- schema: {
248
- fields: [
249
- {
250
- kind: 'dimension',
251
- name: 'carrier',
252
- type: { kind: 'string_type' },
253
- },
254
- ],
255
- },
256
- },
257
- session_id: result.session_id,
258
- };
259
- expect(result).toMatchObject(expected);
260
- });
261
- });
262
- describe('sessions', () => {
263
- describe('ttl', () => {
264
- test('making a different request should purge expired sessions', () => {
265
- let result = (0, sessioned_1.compileModel)({
266
- model_url: 'file://test.malloy',
267
- }, {
268
- // This is in the past...
269
- ttl: new Date(Date.now() - 1000),
270
- });
271
- const session_id = result.session_id;
272
- let expected = {
273
- compiler_needs: {
274
- files: [
275
- {
276
- url: 'file://test.malloy',
277
- },
278
- ],
279
- },
280
- };
281
- expect(result).toMatchObject(expected);
282
- (0, sessioned_1.compileModel)({
283
- model_url: 'file://some_other_model.malloy',
284
- });
285
- result = (0, sessioned_1.compileModel)({ model_url: 'file://test.malloy' }, { session_id });
286
- expected = {
287
- compiler_needs: {
288
- files: [
289
- {
290
- url: 'file://test.malloy',
291
- },
292
- ],
293
- },
294
- };
295
- expect(result).toMatchObject(expected);
296
- // New session
297
- expect(result.session_id).not.toBe(session_id);
298
- });
299
- test('ttl should be updated if set in a subsequent request', () => {
300
- let result = (0, sessioned_1.compileModel)({
301
- model_url: 'file://test.malloy',
302
- }, {
303
- // This is in the past...
304
- ttl: new Date(Date.now() - 1000),
305
- });
306
- const session_id = result.session_id;
307
- let expected = {
308
- compiler_needs: {
309
- files: [
310
- {
311
- url: 'file://test.malloy',
312
- },
313
- ],
314
- },
315
- };
316
- expect(result).toMatchObject(expected);
317
- result = (0, sessioned_1.compileModel)({
318
- model_url: 'file://test.malloy',
319
- compiler_needs: {
320
- files: [
321
- {
322
- url: 'file://test.malloy',
323
- contents: 'source: flights is connection.table("flights")',
324
- },
325
- ],
326
- },
327
- }, {
328
- session_id,
329
- // Update TTL to be far in the future
330
- ttl: { seconds: 100000 },
331
- });
332
- expected = {
333
- compiler_needs: {
334
- table_schemas: [
335
- {
336
- connection_name: 'connection',
337
- name: 'flights',
338
- },
339
- ],
340
- connections: [{ name: 'connection' }],
341
- },
342
- session_id,
343
- };
344
- expect(result).toMatchObject(expected);
345
- // Now asking for a different file should NOT purge the original session
346
- (0, sessioned_1.compileModel)({
347
- model_url: 'file://some_other_model.malloy',
348
- });
349
- result = (0, sessioned_1.compileModel)({ model_url: 'file://test.malloy' }, { session_id });
350
- expect(result).toMatchObject(expected);
351
- });
352
- });
353
- test('getting an error should kill session', () => {
354
- let result = (0, sessioned_1.compileModel)({
355
- model_url: 'file://test.malloy',
356
- compiler_needs: {
357
- files: [
358
- {
359
- url: 'file://test.malloy',
360
- contents: "source: flights is connection.table('flights') extend { dimension: x is does_not_exist }",
361
- },
362
- ],
363
- table_schemas: [
364
- {
365
- connection_name: 'connection',
366
- name: 'flights',
367
- schema: {
368
- fields: [
369
- {
370
- kind: 'dimension',
371
- name: 'carrier',
372
- type: { kind: 'string_type' },
373
- },
374
- ],
375
- },
376
- },
377
- ],
378
- connections: [{ name: 'connection', dialect: 'duckdb' }],
379
- },
380
- });
381
- let expected = {
382
- logs: [
383
- {
384
- url: 'file://test.malloy',
385
- severity: 'error',
386
- message: "'does_not_exist' is not defined",
387
- range: {
388
- start: { line: 0, character: 72 },
389
- end: { line: 0, character: 86 },
390
- },
391
- },
392
- ],
393
- };
394
- const session_id = result.session_id;
395
- expect(result).toMatchObject(expected);
396
- result = (0, sessioned_1.compileModel)({ model_url: 'file://test.malloy' }, { session_id });
397
- expected = {
398
- compiler_needs: {
399
- files: [
400
- {
401
- url: 'file://test.malloy',
402
- },
403
- ],
404
- },
405
- };
406
- expect(result).toMatchObject(expected);
407
- // Should be a new session
408
- expect(result.session_id).not.toBe(session_id);
409
- });
410
- test('sessions should be cleared when they successfully return a result', () => {
411
- let result = (0, sessioned_1.compileModel)({
412
- model_url: 'file://test.malloy',
413
- compiler_needs: {
414
- table_schemas: [
415
- {
416
- connection_name: 'connection',
417
- name: 'flights',
418
- schema: {
419
- fields: [
420
- {
421
- kind: 'dimension',
422
- name: 'carrier',
423
- type: { kind: 'string_type' },
424
- },
425
- ],
426
- },
427
- },
428
- ],
429
- files: [
430
- {
431
- url: 'file://test.malloy',
432
- contents: "source: flights is connection.table('flights')",
433
- },
434
- ],
435
- connections: [{ name: 'connection', dialect: 'duckdb' }],
436
- },
437
- });
438
- let expected = {
439
- model: {
440
- entries: [
441
- {
442
- kind: 'source',
443
- name: 'flights',
444
- schema: {
445
- fields: [
446
- {
447
- kind: 'dimension',
448
- name: 'carrier',
449
- type: { kind: 'string_type' },
450
- },
451
- ],
452
- },
453
- },
454
- ],
455
- anonymous_queries: [],
456
- },
457
- };
458
- const session_id = result.session_id;
459
- expect(result).toMatchObject(expected);
460
- result = (0, sessioned_1.compileModel)({ model_url: 'file://test.malloy' }, { session_id });
461
- // Compiler should not know the contents of this file anymore because the session was cleared
462
- expected = {
463
- compiler_needs: {
464
- files: [
465
- {
466
- url: 'file://test.malloy',
467
- },
468
- ],
469
- },
470
- };
471
- expect(result).toMatchObject(expected);
472
- expect(result.session_id).not.toBe(session_id);
473
- });
474
- });
475
- });
476
- //# sourceMappingURL=sessioned.spec.js.map
@@ -1 +0,0 @@
1
- export {};