@malloy-publisher/server 0.0.237 → 0.0.239

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.
@@ -2,32 +2,43 @@ openapi: 3.1.0
2
2
  info:
3
3
  title: Malloy Publisher - Semantic Model Serving API
4
4
  description: |
5
- The Malloy Publisher - Semantic Model Serving API provides comprehensive access to Malloy packages and their associated resources.
6
- A Malloy package is a directory containing Malloy models (.malloy files), Malloy notebooks (.malloynb files), and embedded databases
7
- (.parquet, .csv, and .xlsx files) with a malloy-publisher.json manifest at the package's root directory.
5
+ The Malloy Publisher - Semantic Model Serving API provides access to Malloy packages and everything they contain.
6
+ A Malloy package is a directory with a `publisher.json` manifest at its root, holding Malloy models (`.malloy` files),
7
+ notebooks (`.malloynb` files), embedded data (`.parquet`, `.csv`, and `.xlsx` files), and optionally an HTML data app
8
+ under `public/`.
8
9
 
9
10
  ## Key Features
10
11
 
11
- - **Environment Management**: Create and manage environments with their associated packages and connections
12
- - **Package Lifecycle**: Full CRUD operations for Malloy packages and their versions
13
- - **Model & Notebook Access**: Retrieve and execute Malloy models and notebooks
14
- - **Connection Management**: Secure database connection configuration and testing
15
- - **Query Execution**: Execute queries against models and retrieve results
16
- - **Watch Mode**: Real-time file watching for development workflows
12
+ - **Discovery**: List environments, packages, and the models, notebooks, pages, and data a package contains
13
+ - **Query Execution**: Run queries against models, execute notebooks a cell at a time, and compile-check Malloy without running it
14
+ - **Pages**: In-package HTML data apps served from a package's `public/` directory
15
+ - **Materializations**: Persist Malloy sources as tables, on a schedule or on demand
16
+ - **Connection Management**: Configure and test warehouse connections, and browse their schemas and tables
17
+ - **Watch Mode**: File watching, and a change-event stream for development workflows
17
18
 
18
19
  ## Resource Hierarchy
19
20
 
20
21
  The API follows a hierarchical resource structure:
21
22
  ```
22
- Environments
23
- ├── Connections
24
- └── Packages
25
- ├── Models
26
- ├── Notebooks
27
- └── Databases
23
+ Server
24
+ ├── /status, /theme server state, and the UI theme
25
+ ├── /connections/test validate a connection config
26
+ ├── /watch-mode/… development file watching
27
+ └── Environments
28
+ ├── Connections schemas, tables, and ad-hoc SQL
29
+ └── Packages
30
+ ├── Models query and compile
31
+ ├── Notebooks execute a cell at a time
32
+ ├── Pages static HTML data apps from public/
33
+ ├── Databases embedded data files
34
+ ├── Materializations persisted sources
35
+ ├── Connections package-scoped connection access
36
+ └── Events SSE stream of file changes
28
37
  ```
29
38
 
30
- For examples, see the Malloy samples packages (https://github.com/malloydata/malloy-samples) repository.
39
+ For worked examples, see the packages this server bundles
40
+ (https://github.com/malloydata/publisher/tree/main/examples); the package format is documented in
41
+ docs/packages.md (https://github.com/malloydata/publisher/blob/main/docs/packages.md).
31
42
  version: v0
32
43
 
33
44
  servers:
@@ -1861,7 +1872,12 @@ paths:
1861
1872
  - "false"
1862
1873
  - name: givens
1863
1874
  in: query
1864
- description: JSON-encoded given values keyed by given name
1875
+ description:
1876
+ A `GivenValues` object, JSON-encoded so it can travel in a query
1877
+ string. Values are typed as `GivenValues` describes them, not
1878
+ string-encoded as `EncodedGivenValues` would be. The parameter keeps
1879
+ its name for compatibility; the schema it carries is the one named
1880
+ here.
1865
1881
  required: false
1866
1882
  schema:
1867
1883
  type: string
@@ -2425,16 +2441,26 @@ components:
2425
2441
  $ref: "#/components/schemas/Error"
2426
2442
  PayloadTooLarge:
2427
2443
  description: |
2428
- The request was well-formed but the response exceeds a server-side
2429
- size cap. Two caps can fire:
2430
- * PUBLISHER_MAX_QUERY_ROWS (default 100000) too many rows.
2431
- * PUBLISHER_MAX_RESPONSE_BYTES (default 50 MB) JSON-serialized
2432
- response too large.
2433
- The error message identifies which cap fired. Refine the query (add
2434
- a LIMIT, more selective WHERE, project fewer columns) or raise the
2435
- relevant cap; retrying without changes will not succeed. The
2436
- per-cap rejection counter is exported as
2437
- publisher_query_cap_exceeded_total{cap_type, source}.
2444
+ The request was well-formed but the response is too large to return.
2445
+ Three cases, and the message says which:
2446
+ * PUBLISHER_MAX_QUERY_ROWS (default 100000) exceeded: too many rows.
2447
+ * PUBLISHER_MAX_RESPONSE_BYTES (default 50 MB) exceeded: the
2448
+ JSON-serialized response measured over the cap. What is measured is
2449
+ the shape the request asked for, so on the model-query endpoint two
2450
+ requests differing only in compactJson reach this cap at different
2451
+ result sizes.
2452
+ * The response could not be serialized at all, past the JavaScript
2453
+ engine's own limit (V8 refuses the string; JSC fails the
2454
+ allocation). No cap was necessarily exceeded here, and raising one
2455
+ does not help. This third case applies to the model-query and
2456
+ notebook-cell endpoints; the connection SQL endpoints have no such
2457
+ guard and answer 500.
2458
+ In every case, refine the query (add a LIMIT, a more selective WHERE,
2459
+ project fewer columns, or filter out wide values); retrying unchanged
2460
+ will not succeed. Raising the relevant cap is an option for the first
2461
+ two only. The rejection counter is exported as
2462
+ publisher_query_cap_exceeded_total{cap_type, source}, where cap_type is
2463
+ rows, bytes, or unserializable.
2438
2464
  content:
2439
2465
  application/json:
2440
2466
  schema:
@@ -2734,7 +2760,7 @@ components:
2734
2760
  default: package
2735
2761
  description: >-
2736
2762
  Package-level Malloy Persistence scope mode, declared once at the
2737
- malloy-publisher.json root and applied uniformly to every persist
2763
+ publisher.json root and applied uniformly to every persist
2738
2764
  source and index in the package. `package` (the default) =
2739
2765
  persisted artifacts are package-scoped: reused across the package's
2740
2766
  published versions whenever they still satisfy freshness. `version`
@@ -2775,28 +2801,35 @@ components:
2775
2801
  type: array
2776
2802
  readOnly: true
2777
2803
  description: >-
2778
- Non-fatal render-tag findings collected when the package loaded: a
2779
- render annotation (e.g. `# big_value` or `# currency`) misconfigured
2780
- for the field it sits on, so it renders as "[object Object]" or an
2781
- inline error at query time but does not stop the model compiling or
2782
- the package loading. Server-computed and read-only: ignored on
2783
- create/update requests and only returned in responses. Present only
2784
- when there are such findings.
2804
+ Non-fatal findings collected when the package loaded, none of which
2805
+ stop the model compiling or the package loading. Render-tag
2806
+ findings: a render annotation (e.g. `# big_value` or `# currency`)
2807
+ misconfigured for the field it sits on, so it renders as
2808
+ "[object Object]" or an inline error at query time. Materialization
2809
+ findings: a `storage=` source not served from storage, a `#@ persist`
2810
+ source that was not recognized as materializable, a persist-target
2811
+ collision, and materialization-config problems that degrade
2812
+ attribution. Server-computed and read-only: ignored on create/update
2813
+ requests and only returned in responses. Present only when there are
2814
+ such findings.
2785
2815
  items:
2786
2816
  type: object
2787
2817
  properties:
2788
2818
  model:
2789
2819
  type: string
2790
2820
  description: >-
2791
- Package-relative path of the model the finding is on.
2792
- target:
2821
+ Package-relative path of the model the finding is on. Absent
2822
+ for a package-wide finding.
2823
+ subject:
2793
2824
  type: string
2794
2825
  description: >-
2795
- The query or view the finding sits on, e.g. `by_carrier` or
2796
- `flights -> by_carrier`.
2826
+ What the finding is about: the query or view a render finding
2827
+ sits on (`by_carrier`, `flights -> by_carrier`), or the source
2828
+ a materialization finding belongs to. Absent when a finding
2829
+ spans several, in which case the message names them.
2797
2830
  message:
2798
2831
  type: string
2799
- description: The render validator's description of the problem.
2832
+ description: A description of the problem.
2800
2833
  severity:
2801
2834
  type: string
2802
2835
  enum:
@@ -2835,7 +2868,7 @@ components:
2835
2868
  - type: "null"
2836
2869
  description: |
2837
2870
  Package-level Malloy Persistence policy declared in
2838
- malloy-publisher.json. The control plane reads it to drive scheduled
2871
+ publisher.json. The control plane reads it to drive scheduled
2839
2872
  re-materialization. The object is present whenever the package has
2840
2873
  loaded — with `schedule: null` when the manifest declares no
2841
2874
  schedule — so the caller can treat object-present as the
@@ -2921,7 +2954,7 @@ components:
2921
2954
  PackageMaterializationConfig:
2922
2955
  type: object
2923
2956
  description: >-
2924
- Package-level Malloy Persistence policy from malloy-publisher.json's
2957
+ Package-level Malloy Persistence policy from publisher.json's
2925
2958
  `materialization` block. Surfaced verbatim so the control plane can drive
2926
2959
  scheduled version-level re-materialization without re-reading the package
2927
2960
  files. The object is emitted whenever the package is loaded, even when no
@@ -2967,7 +3000,7 @@ components:
2967
3000
  Freshness:
2968
3001
  type: object
2969
3002
  description: >-
2970
- Freshness policy declared in malloy-publisher.json's
3003
+ Freshness policy declared in publisher.json's
2971
3004
  `materialization.freshness` block. Fields are surfaced verbatim;
2972
3005
  invalid values are dropped (reported as absent), never defaulted.
2973
3006
  properties:
@@ -3054,18 +3087,22 @@ components:
3054
3087
  type: object
3055
3088
  description: Raw Malloy notebook with unexecuted cell contents
3056
3089
  properties:
3057
- resource:
3090
+ type:
3058
3091
  type: string
3059
- description: Resource path to the notebook
3092
+ description: Always `notebook`. Distinguishes the payload from the
3093
+ compiled-model shape returned by the model endpoint.
3060
3094
  packageName:
3061
3095
  type: string
3062
3096
  description: Name of the package containing this notebook
3063
- path:
3097
+ modelPath:
3064
3098
  type: string
3065
3099
  description: Relative path to the notebook file within its package directory
3066
3100
  malloyVersion:
3067
3101
  type: string
3068
3102
  description: Version of the Malloy compiler used to generate the notebook data
3103
+ modelInfo:
3104
+ type: string
3105
+ description: JSON string containing model metadata and structure information
3069
3106
  notebookCells:
3070
3107
  type: array
3071
3108
  description: Array of notebook cells containing raw markdown and code content
@@ -3076,11 +3113,23 @@ components:
3076
3113
  description: Array of file-level (##) annotations attached to the notebook
3077
3114
  items:
3078
3115
  type: string
3116
+ startingGivens:
3117
+ allOf:
3118
+ - $ref: "#/components/schemas/EncodedGivenValues"
3119
+ description:
3120
+ Starting values for the notebook's controls, declared at its file
3121
+ level. URL parameters override these, which is why the two share a
3122
+ shape. Omitted when the notebook declares none.
3079
3123
  sources:
3080
3124
  type: array
3081
3125
  description: Sources defined in the notebook's model
3082
3126
  items:
3083
3127
  $ref: "#/components/schemas/Source"
3128
+ queries:
3129
+ type: array
3130
+ description: Named queries defined in the notebook's model
3131
+ items:
3132
+ $ref: "#/components/schemas/Query"
3084
3133
 
3085
3134
  CompiledModel:
3086
3135
  type: object
@@ -3193,10 +3242,22 @@ components:
3193
3242
 
3194
3243
  Given:
3195
3244
  type: object
3196
- description:
3245
+ description: |
3197
3246
  A given (runtime parameter) declared on a Malloy model via the
3198
3247
  `given:` keyword. Surfaced on `CompiledModel.givens` and `Source.givens`
3199
3248
  so callers can introspect what runtime values a model accepts.
3249
+
3250
+ `givens` always names a collection of these declarations. Values keyed
3251
+ by given name are `GivenValues` (or `EncodedGivenValues` in the form
3252
+ that survives a URL), and a bare list of names is spelled `givenNames`.
3253
+
3254
+ It also carries how the given should be presented as an input control
3255
+ (`label`, `control`, `rangeMin`, `rangeMax`, `suggest`), derived from
3256
+ the declaration's own tags. That contract belongs to the given rather
3257
+ than to any one surface, which is what lets a notebook and an SDK host
3258
+ render the same control without restating it. Those five fields describe
3259
+ the contract a renderer implements; no endpoint populates them yet, so
3260
+ they are absent from every response today.
3200
3261
  properties:
3201
3262
  name:
3202
3263
  type: string
@@ -3217,15 +3278,85 @@ components:
3217
3278
  the model. Omitted when the given declares no default. Consumers
3218
3279
  render or prefill it per the given's `type` (e.g. unquote a string
3219
3280
  literal for a text input).
3281
+ label:
3282
+ type: string
3283
+ description: Display label from the declaration's `# label=` tag
3284
+ control:
3285
+ type: string
3286
+ enum:
3287
+ - select
3288
+ - multiselect
3289
+ description:
3290
+ How the control renders when the choice is between a single-pick and
3291
+ a multi-pick list. Omitted means infer from the given's type. A
3292
+ slider is not one of these values; it is signalled by `rangeMin` and
3293
+ `rangeMax` instead, per the rule on those fields.
3294
+ rangeMin:
3295
+ type: number
3296
+ description:
3297
+ Slider lower bound from `# range_min=`. The two bounds are what
3298
+ signal a slider, so a `number` or `filter<number>` given renders as
3299
+ one when BOTH are present and as a plain number input otherwise, so
3300
+ a lone bound changes nothing about the control.
3301
+ rangeMax:
3302
+ type: number
3303
+ description:
3304
+ Slider upper bound from `# range_max=`. See `rangeMin` for the rule
3305
+ that turns the pair into a slider.
3306
+ suggest:
3307
+ $ref: "#/components/schemas/GivenSuggest"
3308
+
3309
+ GivenSuggest:
3310
+ type: object
3311
+ description: |
3312
+ Where a select or multiselect control gets its options: a named `query`,
3313
+ a `source` + `dimension` pair, or a `query` with a `dimension` naming
3314
+ which of its columns to read. All three run through the ordinary query
3315
+ endpoint.
3316
+
3317
+ With `query` alone the first column of each row is used, so a
3318
+ single-column `group_by` needs no `dimension`. Give `dimension`
3319
+ alongside `query` when the query returns more than one column.
3320
+ properties:
3321
+ query:
3322
+ type: string
3323
+ source:
3324
+ type: string
3325
+ dimension:
3326
+ type: string
3220
3327
 
3221
- Givens:
3328
+ GivenValues:
3222
3329
  type: object
3223
- description: Per-query given values that override model defaults. Keys are
3224
- given names declared in the model's `given:` block. Values must match
3225
- the declared type (string, number, boolean, date, etc.). See Malloy
3226
- givens documentation for accepted value shapes.
3330
+ description: |
3331
+ Given *values* keyed by given name: what a caller sends, as distinct
3332
+ from `Given`, which describes what the model *accepts*. A collection of
3333
+ declarations is a plain array of `Given`, never this.
3334
+
3335
+ Values are decoded and must match the declared type: a `number` given
3336
+ takes a JSON number, a `date` takes a bare `YYYY-MM-DD` string, a
3337
+ `timestamp` an ISO string with no zone, a `timestamptz` a full ISO
3338
+ string. `EncodedGivenValues` is the string-encoded counterpart.
3227
3339
  additionalProperties: true
3228
3340
 
3341
+ EncodedGivenValues:
3342
+ type: object
3343
+ description: |
3344
+ The same values as `GivenValues`, string-encoded: the form that survives
3345
+ a URL. Every value is a string regardless of the given's declared type,
3346
+ and a `filter<…>` value is the filter body rather than the `f'…'`
3347
+ literal.
3348
+
3349
+ The role it names: a surface's URL parameters and the starting values a
3350
+ document declares share this shape, so the two can merge and then be
3351
+ decoded once against the declarations and sent as `GivenValues`. No
3352
+ endpoint returns it yet. `RawNotebook.startingGivens` is the first field
3353
+ typed as it, and nothing populates that field so far, so today this
3354
+ schema documents the contract rather than describing live traffic. The
3355
+ `givens` query parameter is not an instance of it: that carries a
3356
+ JSON-encoded `GivenValues`, with values typed rather than stringified.
3357
+ additionalProperties:
3358
+ type: string
3359
+
3229
3360
  Source:
3230
3361
  type: object
3231
3362
  description: A Malloy source defined in a model
@@ -3349,7 +3480,7 @@ components:
3349
3480
 
3350
3481
  When true, skip server-side `#(filter)` injection entirely.
3351
3482
  givens:
3352
- $ref: "#/components/schemas/Givens"
3483
+ $ref: "#/components/schemas/GivenValues"
3353
3484
  queryMetadata:
3354
3485
  $ref: "#/components/schemas/QueryMetadata"
3355
3486
  description: >-
@@ -4305,7 +4436,7 @@ components:
4305
4436
  (only available when compilation succeeds and the source contains a
4306
4437
  runnable query).
4307
4438
  givens:
4308
- $ref: "#/components/schemas/Givens"
4439
+ $ref: "#/components/schemas/GivenValues"
4309
4440
  required:
4310
4441
  - source
4311
4442
 
@@ -4379,7 +4510,36 @@ components:
4379
4510
  forceRefresh:
4380
4511
  type: boolean
4381
4512
  default: false
4382
- description: Build a new table even when a source's sourceEntityId is unchanged.
4513
+ description: >-
4514
+ Build a new table even when a source's sourceEntityId is unchanged —
4515
+ that is, defeat skip-if-unchanged, which would otherwise carry the
4516
+ existing table forward and run no SQL for that source.
4517
+
4518
+ It means ONLY that. It never re-seeds a source declaring
4519
+ `refresh="incremental"`: such a source is exempt from
4520
+ skip-if-unchanged anyway (its content address does not move when its
4521
+ data does), so there is nothing here for the flag to change, and
4522
+ reading it as "rebuild from scratch" would make a forced run — which
4523
+ is every scheduled fire — a full rebuild that no delta could ever
4524
+ follow. Ask for a rebuild with `reseed`.
4525
+
4526
+ Has no effect at all on an orchestrated build: the host decides what
4527
+ gets built by instructing it, so no carry-forward runs.
4528
+ reseed:
4529
+ type: boolean
4530
+ default: false
4531
+ description: >-
4532
+ Rebuild every in-scope source declaring `refresh="incremental"` from
4533
+ scratch, ignoring its recorded `covered_through` boundary, and
4534
+ re-derive the boundary from the table each rebuild writes. The escape
4535
+ hatch for a boundary or a table that is no longer trusted. Narrow it
4536
+ with `sourceNames`.
4537
+
4538
+ Unlike `forceRefresh` this is about HOW an incremental source is
4539
+ built, not whether it is built at all, which is why the two are
4540
+ separate flags rather than one. An orchestrated caller can instead
4541
+ set `reseed` per source on each BuildInstruction, and the two are
4542
+ OR-ed: either asks for that source to rebuild.
4383
4543
  sourceNames:
4384
4544
  type: array
4385
4545
  items:
@@ -4548,9 +4708,15 @@ components:
4548
4708
  refresh:
4549
4709
  type: ["string", "null"]
4550
4710
  description: >-
4551
- The source's declared `#@ persist ... refresh=...` value
4552
- ("full" | "incremental"), reported verbatim; null = unset.
4553
- Metadata pass-through inert to the publisher today.
4711
+ The source's declared `#@ persist ... refresh=...` value, reported
4712
+ verbatim; null = unset (which means "full"). Read and VALIDATED by
4713
+ the publisher, no longer an inert pass-through: a value outside
4714
+ {"full", "incremental"} is a publish rejection, and
4715
+ `refresh="incremental"` additionally requires a `watermark=` naming
4716
+ one output dimension (see `annotationFields`). An incremental source
4717
+ advances its serving table by a bounded delta in place instead of
4718
+ being rebuilt, so the mode also governs the build path — which is why
4719
+ it is validated rather than passed through.
4554
4720
  freshness:
4555
4721
  oneOf:
4556
4722
  - $ref: "#/components/schemas/Freshness"
@@ -4586,12 +4752,37 @@ components:
4586
4752
  type: object
4587
4753
  additionalProperties:
4588
4754
  type: string
4589
- description:
4755
+ description: >-
4590
4756
  All key=value fields of the source's `#@ persist` annotation (e.g.
4591
4757
  `name`, `realization`). The control plane uses `name` as the
4592
4758
  materialized table name (it may carry a dialect container path like
4593
4759
  `dataset.table`). Returned as the full set so new persist directives
4594
- need no publisher change.
4760
+ need no publisher change; an unrecognized key rides through here and
4761
+ is reported as a package warning, never a rejection.
4762
+
4763
+
4764
+ Recognized keys beyond `name`/`realization`/`storage`, both read from
4765
+ the EFFECTIVE merged tag (a source extending a persisted parent
4766
+ inherits the parent's keys, and its own keys merge over them per key):
4767
+
4768
+
4769
+ * `watermark` — one output dimension name, monotone non-decreasing.
4770
+ Required by `refresh="incremental"`; the platform derives each
4771
+ refresh's half-open range from it. Must be a single quoted string
4772
+ naming a column of `columns`.
4773
+
4774
+
4775
+ * `merge_key` — comma-separated output dimension names, none of them
4776
+ the watermark. Declares row identity for a source whose rows are
4777
+ restated with a LATER watermark value, which selects a MERGE apply;
4778
+ omitted, the delta replaces the range instead. Compound keys go in one
4779
+ quoted string (`merge_key="order_id, region"`).
4780
+
4781
+
4782
+ Both are validated at publish against the compiled output schema, so
4783
+ a dangling or stale name is rejected rather than deferred to a build.
4784
+ Neither participates in `sourceEntityId`: adding a watermark to an
4785
+ existing source must not re-address its table.
4595
4786
  modelPath:
4596
4787
  type: string
4597
4788
  description:
@@ -4709,6 +4900,26 @@ components:
4709
4900
  The name resolves generically against registered connections; any
4710
4901
  managed-tier alias is resolved by the host upstream and never
4711
4902
  reaches the publisher.
4903
+ reseed:
4904
+ type: boolean
4905
+ default: false
4906
+ description: >-
4907
+ Rebuild this source from scratch even if it declares
4908
+ `refresh="incremental"` and has a recorded `covered_through`
4909
+ boundary: the build runs the ordinary full CTAS and the boundary is
4910
+ re-derived from the table it writes. The escape hatch for a boundary
4911
+ or a table that is no longer trusted.
4912
+
4913
+ Per-source rather than only per-request because re-seeding is a
4914
+ per-source decision: a host may want one source rebuilt while the
4915
+ rest advance by delta in the same run. OR-ed with the request-level
4916
+ `reseed`, so either asks for this source to rebuild. Ignored for a
4917
+ source that is not incremental (such a source is always built in
4918
+ full).
4919
+
4920
+ Note `forceRefresh` is NOT how you ask for this, in any mode: it
4921
+ only defeats skip-if-unchanged, which does not even run for an
4922
+ orchestrated build.
4712
4923
 
4713
4924
  BuildManifest:
4714
4925
  type: object
@@ -4794,6 +5005,26 @@ components:
4794
5005
  description: >-
4795
5006
  Per-version read-time policy when the entry is stale. Never combined
4796
5007
  across versions; each version's entries carry its own declared fallback.
5008
+ coveredThrough:
5009
+ type: string
5010
+ description: >-
5011
+ For a source declaring `refresh="incremental"`, the EXCLUSIVE upper
5012
+ end of the watermark range this table is now known to contain — the
5013
+ boundary the next refresh will start from. Canonical scalar text
5014
+ (`2024-07-01`, `2024-07-01 12:00:00`, `41`), interpreted per
5015
+ `coveredThroughType`.
5016
+
5017
+ Reported so a caller can observe and verify incremental progress
5018
+ rather than infer it: a value that advanced between runs is a delta
5019
+ that applied. Absent for a non-incremental source, and for an
5020
+ incremental one whose source is empty (no boundary is derivable, so
5021
+ none is recorded).
5022
+ coveredThroughType:
5023
+ type: string
5024
+ description: >-
5025
+ The Malloy type of `coveredThrough` (`date`, `timestamp`, `number`,
5026
+ `string`), which decides how its text is compared and rendered.
5027
+ Present exactly when `coveredThrough` is.
4797
5028
 
4798
5029
  parameters:
4799
5030
  environmentName:
@@ -1 +1 @@
1
- import{$ as r,F as t,j as e,a0 as i,a9 as o}from"./index-BRijWj6K.js";function m(){const s=r(),{environmentName:n}=t();if(n){const a=i({environmentName:n});return e.jsx(o,{onSelectPackage:s,resourceUri:a})}else return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})})}export{m as default};
1
+ import{$ as r,F as t,j as e,a0 as i,a9 as o}from"./index-ByceOJbS.js";function m(){const s=r(),{environmentName:n}=t();if(n){const a=i({environmentName:n});return e.jsx(o,{onSelectPackage:s,resourceUri:a})}else return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})})}export{m as default};
@@ -1 +1 @@
1
- import{$ as t,j as o,J as a}from"./index-BRijWj6K.js";function s(){const n=t();return o.jsx(a,{onClickEnvironment:n})}export{s as default};
1
+ import{$ as t,j as o,J as a}from"./index-ByceOJbS.js";function s(){const n=t();return o.jsx(a,{onClickEnvironment:n})}export{s as default};
@@ -1 +1 @@
1
- import{c,j as s}from"./index-BRijWj6K.js";const t=c(s.jsx("path",{d:"M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1"})),a=c(s.jsx("path",{d:"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5M2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1m18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1M11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1m0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1M5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0z"}));export{t as D,a as L};
1
+ import{c,j as s}from"./index-ByceOJbS.js";const t=c(s.jsx("path",{d:"M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1"})),a=c(s.jsx("path",{d:"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5M2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1m18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1M11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1m0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1M5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0z"}));export{t as D,a as L};