@finbheara/archive-client 0.51.0 → 0.53.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.
package/README.md CHANGED
@@ -90,6 +90,7 @@ c.features; // [{ feature: "dancers", state: "full" | "missing", missing: [...
90
90
  | `results.stream`, `majors.stream` | `results.stream`, `results.entries` | 255 |
91
91
  | `results.stream.competition`, `majors.stream.competition` | the competition fields a streamed row carries (`competition_line`, `dance_printed`, `dance`, `recalled_only`, `comp_flags`, `competitors_basis`); absent, never refused, without them | 270 |
92
92
  | `feises.dates` | `feises.dates` | 245 |
93
+ | `feises.name` | the `name` `feises.find` and `feises.series` answer: the release's reading, the label as printed except where it lost a letter (U+FFFD) the feis's own pages print clean; `name_printed` beside it is the label verbatim. Without it `name` is the label, never refused | 350 |
93
94
  | `dancers.records` | `dancers.records` | 215 |
94
95
  | `dancers.records.names` | the `names_printed` a record of `dancers.records` carries; absent, never refused, without it | 215 |
95
96
  | `dancers.years` | `dancers.years` | 245 |
@@ -98,6 +99,7 @@ c.features; // [{ feature: "dancers", state: "full" | "missing", missing: [...
98
99
  | `results.major`, `majors.major` | the `major` a row of `results.stream` and `results.entries` carries (1 where its competition is a main event of a T1-T3 event, exactly the rows `majors.sqlite` holds); absent without it, and the stream filter `major` is refused by name without it | 345 |
99
100
  | `results.relative_place_err`, `majors.relative_place_err` | the `relative_place_err` a row of `results.stream` and `results.entries` carries (how far below `relative_place` the true value may sit, 0 over an exact field); absent, never refused, without it | 350 |
100
101
  | `results.marks_printed`, `majors.marks_printed` | the `marks_printed` a row of `results.stream` and `results.entries` carries (the marks total a row served or printed, iFeis's beside its `points` and a Bucharest transcript row's, one string verbatim); absent, never refused, without it | 350 |
102
+ | `results.status_printed`, `majors.status_printed` | the `status_printed` a row of `results.stream` and `results.entries` carries (a transcribed row's status cell as printed, verbatim, in printed order, `[]` where none); absent, never refused, without it | 350 |
101
103
  | `results.round_points_printed`, `majors.round_points_printed` | the `round_points_printed` a row of `results.stream` and `results.entries` carries (the per-round points a platform served, FeisFWD's, in its slot order, a slot served nothing in null); absent, never refused, without it | 350 |
102
104
  | `dancers.records.birth_consistency`, `dancers.years.birth_consistency` | the `birth_consistency` (0-100, floored: the percent of the dancer's, or the dancer-year's, readable rows that fit the birth window) and its denominator `birth_consistency_rows` a record of `dancers.records` and a dancer-year of `dancers.years` carry; absent, never refused, without it | 345 |
103
105
  | `dancers.records.birth_deadband`, `dancers.years.birth_deadband` | the `birth_deadband_rows` a record of `dancers.records` and a dancer-year of `dancers.years` carry (the readable rows a one-year dance-up alone keeps off the birth window, outside `birth_consistency` and its denominator); absent, never refused, without it | 345 |
@@ -107,6 +109,7 @@ c.features; // [{ feature: "dancers", state: "full" | "missing", missing: [...
107
109
  | `teams.fields` | the fields `teams.results` (`age`, `gender`, `printed_status`) and `teams.rosters` (`dance`, `school_printed_as_of`, a member's `gender`) carry; absent, never refused, without it | 266 |
108
110
  | `teams.recall` | the `competitors_printed` and `recalled_only` a row of `teams.results` carries; absent, never refused, without it | 350 |
109
111
  | `events` | `events.years` | 260 |
112
+ | `events.published` | the `published` (`results`, or `attended`: held, its dancers named in `name-school-listings.jsonl`, no place published) and `listed` (those lines) an event-year of `events.years` carries; absent, never refused, without it | 350 |
110
113
  | `upcoming.feises` | `upcoming.feises`, and the `next` of `feises.series` (null with the reason without it) | 285 |
111
114
  | `upcoming.fields`, `upcoming.entrants` | `upcoming.fields`, `upcoming.entrants` (285 and 290 carry the tables empty) | 291 |
112
115
  | `upcoming.fields.instance` | the `feis_instance_id` `upcoming.fields` carries; absent, never refused, without it | 320 |
@@ -257,8 +260,8 @@ await rel.feises.find({ id: "<feis, series instance or brand id>" }); // a reti
257
260
  await rel.feises.find({ name: "*Spring*", year: 2024 });
258
261
  ```
259
262
 
260
- One answer per feis id: dates, location, series ids, regions, and how many competitions, rows
261
- and captures it has.
263
+ One answer per feis id: its `name` and the label as printed (`name_printed`), dates, location,
264
+ series ids, regions, and how many competitions, rows and captures it has. A name glob reads both.
262
265
 
263
266
  ```ts
264
267
  const s = await rel.feises.series("Ardvarna Spring"); // a name, a host code ("fweb:ABC", "fweb:ABC26"), any feis id
@@ -652,6 +655,12 @@ or summed, and the places follow the points, not the marks. A Bucharest transcri
652
655
  carries its printed mark the same way, one adjudicator's mark and no `points` (`"80"`). Null where
653
656
  the row carries none and on every other source's row.
654
657
 
658
+ THE STATUS CELL AS PRINTED, where the release carries it
659
+ (`rel.capability("results.status_printed")`): `status_printed`, a transcribed row's status cell
660
+ verbatim, in printed order (`["Not Recalled"]`, `["-"]`, `["*"]`, `["WQ"]`). `atts` is the
661
+ reading of the same cell, so a cell it reads as nothing (`-`, `Not Recalled`) is told apart from
662
+ a blank cell here. `[]` where the row prints none, and on every platform row.
663
+
655
664
  THE COMPETITION FIELDS, where the release carries them (`rel.capability("results.stream.competition")`,
656
665
  `"majors.stream.competition"` for scope `majors`), are on every row, null meaning no value:
657
666
 
@@ -753,7 +762,8 @@ t.teams; // [{ team, kind, event, year, comp_no, title, team_index, seq, sch
753
762
  const j = await rel.teams.resultRosters({ event: "<event>", year: 2024 });
754
763
  j.joins; // [{ team, result_address, join_kind, via_split, roster_index, result_letter, ... }]
755
764
  const e = await rel.events.years({ event: "<event>" });
756
- e.years; // [{ event, year, date_lo, date_hi, resolution, source, date_printed, place, place_printed }]
765
+ e.years; // [{ event, year, date_lo, date_hi, resolution, source, date_printed, place, place_printed,
766
+ // published, listed }]
757
767
  ```
758
768
 
759
769
  A query names an event (case-blind), a year, both, or neither (every row). Everything comes from
@@ -764,7 +774,10 @@ roster team met the results (`exact`, `card`, `branch`) or why it did not (`no-r
764
774
  `no-school`, `no-roster`, `multi-team-unjoined`), and `result_address` is null where none joined.
765
775
  An event-year's dates are a window (`date_lo`, `date_hi`) with how fine it is (`resolution`:
766
776
  `day`, `month`, `calendar`) and what it is read from (`source`), and `place` is a place-tree node
767
- where the release knows one. A team result's `age` and `gender` are the competition's band and sex
777
+ where the release knows one. `published` is `results` where the event-year publishes result rows
778
+ and `attended` where it was held and only a listing page (a recall dump) names its dancers: no
779
+ competition or place is published, `listed` counts the event-year's lines of
780
+ `name-school-listings.jsonl`, and its calendar row reads terminal `attended`. A team result's `age` and `gender` are the competition's band and sex
768
781
  as the release reads them, `printed_status` the row's printed status cell verbatim. Its
769
782
  `competitors` is the field: the printed count, except on a sheet that printed the recalled teams
770
783
  only (`recalled_only`), where it is the entries the event-year's programme lists, never fewer than
@@ -878,7 +891,8 @@ release holds captures of that kind for the instance's platform, so a later one
878
891
  `not-captured` (it holds none). A day first observed never moves later from one release to the
879
892
  next: a stage an earlier release observed keeps its day, named in `carried` (`["row"]` for a row
880
893
  the cut no longer names, kept whole), and a retired id is listed in `formerly`. `terminal` is
881
- `results`, `withdrawn` (every field withdrawn), `passed-no-results` (its first day is before the
894
+ `attended` (a majors event-year held and published with no results, only a listing naming its
895
+ dancers: its `results` stage is `not-captured`), `results`, `withdrawn` (every field withdrawn), `passed-no-results` (its first day is before the
882
896
  cut's day), or null for a feis still ahead. Stage dates follow capture timing, not the feis's own
883
897
  order: only results after the run is a belief. `get` tries the instance id, then `formerly`, then
884
898
  a capture, then an occurrence id, and says which met (`via`). On a release without the table each
@@ -1092,7 +1106,7 @@ Every verb takes `--cache <dir>`, `--repo <owner/name>`, `--json`, `--live` and
1092
1106
  idq upcoming --feises [--state upcoming|no-results] [--brand <series>] [--from <date>] [--to <date>]
1093
1107
  idq calendar [--release <spec>] <instance|feis id|occurrence id>
1094
1108
  idq calendar [--brand <series>] [--tier <t>] [--from <date>] [--to <date>] [--stage <s>] [--state <s>]
1095
- [--terminal results|withdrawn|passed-no-results|none]
1109
+ [--terminal attended|results|withdrawn|passed-no-results|none]
1096
1110
  idq calendar --next [--brand <series>]
1097
1111
  idq calendar --missing [--stage results|entrants] [--platform <p>] [--tier <t>]
1098
1112
  [--kind platform-host|listing-only]
@@ -606,6 +606,18 @@ var FEATURES2 = [
606
606
  since: 350,
607
607
  calls: "the same on a row of results.stream and results.entries (scope majors)"
608
608
  },
609
+ {
610
+ feature: "results.status_printed",
611
+ needs: ["results:results.status_printed"],
612
+ since: 350,
613
+ calls: "the `status_printed` a row of results.stream and results.entries carries (a transcribed row's status cell as printed, verbatim, in printed order, `[]` where none): absent, never refused, on a release without it"
614
+ },
615
+ {
616
+ feature: "majors.status_printed",
617
+ needs: ["majors:results.status_printed"],
618
+ since: 350,
619
+ calls: "the same on a row of results.stream and results.entries (scope majors)"
620
+ },
609
621
  {
610
622
  feature: "majors.attach_basis",
611
623
  needs: ["majors:results.attach_basis"],
@@ -624,6 +636,12 @@ var FEATURES2 = [
624
636
  since: 245,
625
637
  calls: "feises.dates"
626
638
  },
639
+ {
640
+ feature: "feises.name",
641
+ needs: ["results:feises.name", "results:feises.name_source"],
642
+ since: 350,
643
+ calls: "the `name` feises.find and feises.series answer (the release's reading: the label as printed, except where it lost a letter the feis's own pages print); on a release without it, `name` is the label as printed, never refused"
644
+ },
627
645
  {
628
646
  feature: "dancers.records",
629
647
  needs: [
@@ -783,6 +801,12 @@ var FEATURES2 = [
783
801
  since: 260,
784
802
  calls: "events.years (the events index)"
785
803
  },
804
+ {
805
+ feature: "events.published",
806
+ needs: ["table:event_years.published", "table:event_years.listed"],
807
+ since: 350,
808
+ calls: "the `published` (`results`, or `attended`: held, its dancers named in name-school-listings.jsonl, no place published) and `listed` an event-year of events.years carries: absent, never refused, on a release without them"
809
+ },
786
810
  {
787
811
  feature: "upcoming.feises",
788
812
  needs: [
@@ -1153,7 +1177,7 @@ var describeEvent = (e) => {
1153
1177
  var SCHEMA = `
1154
1178
  CREATE TABLE feis(
1155
1179
  feis_id TEXT PRIMARY KEY, source TEXT NOT NULL, token TEXT NOT NULL, host_id TEXT NOT NULL,
1156
- name TEXT NOT NULL, date_lo TEXT, date_hi TEXT, date_printed TEXT, year INTEGER,
1180
+ name TEXT NOT NULL, name_printed TEXT NOT NULL, date_lo TEXT, date_hi TEXT, date_printed TEXT, year INTEGER,
1157
1181
  location TEXT, instance_id TEXT, brand_id TEXT, regions TEXT NOT NULL,
1158
1182
  competitions INTEGER NOT NULL, rows INTEGER NOT NULL, captures INTEGER NOT NULL
1159
1183
  );
@@ -1173,7 +1197,7 @@ function readJsonl(path) {
1173
1197
  }
1174
1198
  var feisesIndex = {
1175
1199
  name: "feises",
1176
- version: "2",
1200
+ version: "3",
1177
1201
  inputs: ["results", "feis-redirects.jsonl"],
1178
1202
  says: "every feis by id, platform, code, series and name, with its counts and regions",
1179
1203
  build(rel, out) {
@@ -1188,15 +1212,16 @@ var feisesIndex = {
1188
1212
  const rows = new Map;
1189
1213
  for (const r of src.query("SELECT c.event AS event, sum(r.n) AS n FROM (SELECT competition, count(*) AS n FROM results GROUP BY competition) r JOIN (SELECT DISTINCT competition, event FROM competitions) c ON c.competition = r.competition GROUP BY c.event").all())
1190
1214
  rows.set(r.event, r.n);
1191
- const put = out.prepare("INSERT OR IGNORE INTO feis VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
1215
+ const put = out.prepare("INSERT OR IGNORE INTO feis VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
1192
1216
  const captures = new Map;
1193
- const feisRows = src.query("SELECT feis_id, source, host_id, name_printed, date_lo, date_hi, date_printed, year, location_printed, feis_instance_id, feis_brand_id FROM feises ORDER BY file, line").all();
1217
+ const named = columnsOf2(src, "feises").has("name");
1218
+ const feisRows = src.query(`SELECT feis_id, source, host_id, name_printed, ${named ? "name" : "name_printed AS name"}, date_lo, date_hi, date_printed, year, location_printed, feis_instance_id, feis_brand_id FROM feises ORDER BY file, line`).all();
1194
1219
  for (const f of feisRows)
1195
1220
  captures.set(f.feis_id, (captures.get(f.feis_id) ?? 0) + 1);
1196
1221
  for (const f of feisRows) {
1197
1222
  const c = counts.get(f.feis_id);
1198
1223
  const colon = f.feis_id.indexOf(":");
1199
- put.run(f.feis_id, f.source, colon === -1 ? f.source : f.feis_id.slice(0, colon), f.host_id, f.name_printed, f.date_lo, f.date_hi, f.date_printed, f.year, f.location_printed, f.feis_instance_id, f.feis_brand_id, JSON.stringify([...c?.regions ?? []].sort()), c?.comps ?? 0, rows.get(f.feis_id) ?? 0, captures.get(f.feis_id) ?? 0);
1224
+ put.run(f.feis_id, f.source, colon === -1 ? f.source : f.feis_id.slice(0, colon), f.host_id, f.name, f.name_printed, f.date_lo, f.date_hi, f.date_printed, f.year, f.location_printed, f.feis_instance_id, f.feis_brand_id, JSON.stringify([...c?.regions ?? []].sort()), c?.comps ?? 0, rows.get(f.feis_id) ?? 0, captures.get(f.feis_id) ?? 0);
1200
1225
  }
1201
1226
  const red = out.prepare("INSERT OR REPLACE INTO redirect VALUES (?, ?, ?)");
1202
1227
  for (const r of readJsonl(rel.path("feis-redirects.jsonl")))
@@ -1249,8 +1274,8 @@ class FeisFinder2 {
1249
1274
  args.push(id, id, id);
1250
1275
  }
1251
1276
  if (q.name !== undefined) {
1252
- where.push("name LIKE ? ESCAPE '\\'");
1253
- args.push(globToLike(q.name));
1277
+ where.push("(name LIKE ? ESCAPE '\\' OR name_printed LIKE ? ESCAPE '\\')");
1278
+ args.push(globToLike(q.name), globToLike(q.name));
1254
1279
  }
1255
1280
  if (q.year !== undefined) {
1256
1281
  where.push("year = ?");
@@ -1558,7 +1583,7 @@ function streamSql(q, shape = {}) {
1558
1583
  if (q.major !== undefined)
1559
1584
  where.push(q.major ? "r.major = 1" : "r.major = 0");
1560
1585
  return {
1561
- sql: `SELECT ${COLUMNS}${shape.competition === true ? COMPETITION_COLUMNS : ""}${shape.competitorsPrinted === true ? ", c.competitors_printed AS competitors_printed" : ""}${shape.attachBasis === true ? ", r.attach_basis AS attach_basis" : ""}${shape.major === true ? ", r.major AS major" : ""}${shape.relativePlaceErr === true ? ", r.relative_place_err AS relative_place_err" : ""}${shape.roundPoints === true ? ", r.round_points_printed AS round_points_printed" : ""}${shape.marks === true ? ", r.marks_printed AS marks_printed" : ""} FROM results r JOIN competitions c ON c.file = r.file AND c.line = r.competition_line${where.length === 0 ? "" : ` WHERE ${where.join(" AND ")}`} ORDER BY r.file, r.line`,
1586
+ sql: `SELECT ${COLUMNS}${shape.competition === true ? COMPETITION_COLUMNS : ""}${shape.competitorsPrinted === true ? ", c.competitors_printed AS competitors_printed" : ""}${shape.attachBasis === true ? ", r.attach_basis AS attach_basis" : ""}${shape.major === true ? ", r.major AS major" : ""}${shape.relativePlaceErr === true ? ", r.relative_place_err AS relative_place_err" : ""}${shape.roundPoints === true ? ", r.round_points_printed AS round_points_printed" : ""}${shape.marks === true ? ", r.marks_printed AS marks_printed" : ""}${shape.status === true ? ", r.status_printed AS status_printed" : ""} FROM results r JOIN competitions c ON c.file = r.file AND c.line = r.competition_line${where.length === 0 ? "" : ` WHERE ${where.join(" AND ")}`} ORDER BY r.file, r.line`,
1562
1587
  args
1563
1588
  };
1564
1589
  }
@@ -1570,7 +1595,7 @@ function feisDates(db) {
1570
1595
  }
1571
1596
  var text = (v) => v === null || v === "" ? null : v;
1572
1597
  function rowOf(r, dates) {
1573
- const { atts, withdrawn, recalled_only, round_points_printed, ...rest } = r;
1598
+ const { atts, withdrawn, recalled_only, round_points_printed, status_printed, ...rest } = r;
1574
1599
  const d = dates.get(r.event);
1575
1600
  return {
1576
1601
  ...rest,
@@ -1587,6 +1612,7 @@ function rowOf(r, dates) {
1587
1612
  ...round_points_printed === undefined ? {} : {
1588
1613
  round_points_printed: round_points_printed === null ? null : JSON.parse(round_points_printed)
1589
1614
  },
1615
+ ...status_printed === undefined ? {} : { status_printed: JSON.parse(status_printed) },
1590
1616
  withdrawn: text(withdrawn),
1591
1617
  qualifier: text(rest.qualifier),
1592
1618
  primary_source: text(rest.primary_source),
@@ -1712,6 +1738,7 @@ class ResultFinder2 {
1712
1738
  const relativePlaceErr = (await this.rel.capability(`${db}.relative_place_err`)).state === "full";
1713
1739
  const roundPoints = (await this.rel.capability(`${db}.round_points_printed`)).state === "full";
1714
1740
  const marks = (await this.rel.capability(`${db}.marks_printed`)).state === "full";
1741
+ const status = (await this.rel.capability(`${db}.status_printed`)).state === "full";
1715
1742
  return {
1716
1743
  db: this.rel.db(db),
1717
1744
  shape: {
@@ -1721,7 +1748,8 @@ class ResultFinder2 {
1721
1748
  major,
1722
1749
  relativePlaceErr,
1723
1750
  roundPoints,
1724
- marks
1751
+ marks,
1752
+ status
1725
1753
  }
1726
1754
  };
1727
1755
  }
@@ -3865,23 +3893,23 @@ var teamsIndex = {
3865
3893
  };
3866
3894
  var EVENTS_SCHEMA = `CREATE TABLE event_year(event TEXT NOT NULL, year INTEGER NOT NULL,
3867
3895
  date_lo TEXT, date_hi TEXT, resolution TEXT, source TEXT, date_printed TEXT, place TEXT,
3868
- place_printed TEXT, PRIMARY KEY(event, year))`;
3896
+ place_printed TEXT, published TEXT, listed INTEGER, PRIMARY KEY(event, year))`;
3869
3897
  var eventsIndex = {
3870
3898
  name: "events",
3871
- version: "1",
3899
+ version: "2",
3872
3900
  inputs: [tableAsset("event_years")],
3873
3901
  says: "every event-year: its dates (and how fine they are) and its place",
3874
3902
  load: (rel) => readTables(rel, ["event_years"]),
3875
3903
  build(_rel, out, loaded) {
3876
3904
  const rows = loaded.event_years ?? [];
3877
3905
  out.run(EVENTS_SCHEMA);
3878
- const put = out.prepare("INSERT OR IGNORE INTO event_year VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
3906
+ const put = out.prepare("INSERT OR IGNORE INTO event_year VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
3879
3907
  for (const r of rows) {
3880
3908
  const event = str2(r.event);
3881
3909
  const year = num2(r.year);
3882
3910
  if (event === null || year === null)
3883
3911
  continue;
3884
- put.run(event, year, str2(r.date_lo), str2(r.date_hi), str2(r.resolution), str2(r.source), JSON.stringify(strs(r.date_printed)), str2(r.place), JSON.stringify(strs(r.place_printed)));
3912
+ put.run(event, year, str2(r.date_lo), str2(r.date_hi), str2(r.resolution), str2(r.source), JSON.stringify(strs(r.date_printed)), str2(r.place), JSON.stringify(strs(r.place_printed)), str2(r.published), num2(r.listed));
3885
3913
  }
3886
3914
  out.run("CREATE INDEX event_year_event ON event_year(event COLLATE NOCASE)");
3887
3915
  }
@@ -3980,15 +4008,18 @@ class EventFinder2 {
3980
4008
  async years(q = {}) {
3981
4009
  const db = await this.rel.indexDb("events");
3982
4010
  const w = whereOf(q);
3983
- const rows = db.query(`SELECT event, year, date_lo, date_hi, resolution, source, date_printed, place, place_printed
4011
+ const rows = db.query(`SELECT event, year, date_lo, date_hi, resolution, source, date_printed, place, place_printed,
4012
+ published, listed
3984
4013
  FROM event_year${w.sql} ORDER BY year, event`).all(...w.args);
3985
4014
  return {
3986
4015
  tag: this.rel.tag,
3987
4016
  asked: q,
3988
- years: rows.map((r) => ({
4017
+ years: rows.map(({ published, listed, ...r }) => ({
3989
4018
  ...r,
3990
4019
  date_printed: JSON.parse(r.date_printed),
3991
- place_printed: JSON.parse(r.place_printed)
4020
+ place_printed: JSON.parse(r.place_printed),
4021
+ ...published === "results" || published === "attended" ? { published } : {},
4022
+ ...listed === null ? {} : { listed }
3992
4023
  }))
3993
4024
  };
3994
4025
  }
@@ -4188,6 +4219,7 @@ var CALENDAR_STAGE_STATES2 = [
4188
4219
  "not-captured"
4189
4220
  ];
4190
4221
  var CALENDAR_TERMINALS2 = [
4222
+ "attended",
4191
4223
  "results",
4192
4224
  "withdrawn",
4193
4225
  "passed-no-results"
package/dist/cli.js CHANGED
@@ -23,7 +23,7 @@ import {
23
23
  staleWarning2,
24
24
  progressMode2,
25
25
  progressRenderer2
26
- } from "./chunks/index-kbg0a5pp.js";
26
+ } from "./chunks/index-6np7hsst.js";
27
27
  import"./chunks/index-hghdy980.js";
28
28
 
29
29
  var USAGE_HEADER = "usage: idq <verb> [--cache <dir>] [--repo <owner/name>] [--json] [--live] [--progress tty|plain|none]";
@@ -422,7 +422,7 @@ var VERBS = [
422
422
  " the day first observed and the capture that observed it",
423
423
  " calendar [--brand <series>] [--tier T1..T4] [--from <date>] [--to <date>]",
424
424
  " [--stage announced|syllabus|entrants|run|results] [--state observed|pending|not-captured]",
425
- " [--terminal results|withdrawn|passed-no-results|none]",
425
+ " [--terminal attended|results|withdrawn|passed-no-results|none]",
426
426
  " the instances a query names, by first day; each stage's",
427
427
  " expected day with its basis and n where the release has them",
428
428
  " calendar --next [--brand <series>]",
package/dist/index.js CHANGED
@@ -85,7 +85,7 @@ import {
85
85
  PROGRESS_MODES2,
86
86
  progressMode2,
87
87
  progressRenderer2
88
- } from "./chunks/index-kbg0a5pp.js";
88
+ } from "./chunks/index-6np7hsst.js";
89
89
  import {
90
90
  cacheRoot2,
91
91
  repoOf2
@@ -3,7 +3,7 @@ export type CalendarStage = "announced" | "syllabus" | "entrants" | "run" | "res
3
3
  export declare const CALENDAR_STAGES: readonly CalendarStage[];
4
4
  export type CalendarStageState = "observed" | "pending" | "not-captured";
5
5
  export declare const CALENDAR_STAGE_STATES: readonly CalendarStageState[];
6
- export type CalendarTerminal = "results" | "withdrawn" | "passed-no-results";
6
+ export type CalendarTerminal = "attended" | "results" | "withdrawn" | "passed-no-results";
7
7
  export declare const CALENDAR_TERMINALS: readonly CalendarTerminal[];
8
8
  export type CalendarExpectedBasis = "announced" | "brand" | "platform" | "pooled" | "roster-window" | "unmeasured";
9
9
  export interface CalendarExpected {
@@ -8,6 +8,7 @@ export interface Feis {
8
8
  token: string;
9
9
  host_id: string;
10
10
  name: string;
11
+ name_printed: string;
11
12
  date_lo: string | null;
12
13
  date_hi: string | null;
13
14
  date_printed: string | null;
@@ -66,6 +66,7 @@ export interface StreamRow extends Partial<StreamCompetition> {
66
66
  points_printed: string | null;
67
67
  round_points_printed?: (string | null)[] | null;
68
68
  marks_printed?: string | null;
69
+ status_printed?: string[];
69
70
  platform_dancer_id: string | null;
70
71
  primary_source: string | null;
71
72
  file: string;
@@ -83,6 +84,7 @@ export interface StreamShape {
83
84
  relativePlaceErr?: boolean;
84
85
  roundPoints?: boolean;
85
86
  marks?: boolean;
87
+ status?: boolean;
86
88
  }
87
89
  export declare const scopeDb: (s: StreamScope) => "majors" | "results";
88
90
  export declare function streamSql(q: StreamQuery, shape?: StreamShape): {
@@ -79,6 +79,8 @@ export interface EventYear {
79
79
  date_printed: string[];
80
80
  place: string | null;
81
81
  place_printed: string[];
82
+ published?: "results" | "attended";
83
+ listed?: number;
82
84
  }
83
85
  export declare const teamsIndex: IndexBuilder;
84
86
  export declare const eventsIndex: IndexBuilder;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finbheara/archive-client",
3
- "version": "0.51.0",
3
+ "version": "0.53.0",
4
4
  "description": "Open a versioned release of an Irish dance results archive: download, verify, decompress and cache it by tag, keep the cache, and resolve feises and schools against it",
5
5
  "keywords": ["irish-dance", "results", "release", "cache", "sqlite"],
6
6
  "license": "MIT",