@finbheara/archive-client 0.24.0 → 0.26.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 +116 -3
- package/dist/chunks/{index-vsk6837c.js → index-8mwx3n9j.js} +724 -20
- package/dist/cli.js +304 -2
- package/dist/index.js +13 -1
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/feises.d.ts +9 -0
- package/dist/types/index.d.ts +4 -1
- package/dist/types/people.d.ts +12 -0
- package/dist/types/release.d.ts +6 -0
- package/dist/types/school-bulk.d.ts +80 -0
- package/dist/types/schools.d.ts +33 -0
- package/dist/types/tabs.d.ts +132 -0
- package/dist/types/upcoming.d.ts +138 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -95,6 +95,15 @@ c.features; // [{ feature: "dancers", state: "full" | "missing", missing: [...
|
|
|
95
95
|
| `teams` | `teams.results`, `teams.rosters`, `teams.resultRosters` | 260 |
|
|
96
96
|
| `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 |
|
|
97
97
|
| `events` | `events.years` | 260 |
|
|
98
|
+
| `upcoming.feises` | `upcoming.feises`, and the `next` of `feises.series` (null with the reason without it) | 285 |
|
|
99
|
+
| `upcoming.fields`, `upcoming.entrants` | `upcoming.fields`, `upcoming.entrants` (285 and 290 carry the tables empty) | 291 |
|
|
100
|
+
| `tabs`, `panels` | `tabs.query`, `tabs.stream`; `panels.query` | 184 |
|
|
101
|
+
| `feis-panels` | `feisPanels.query` | 260 |
|
|
102
|
+
| `staff.adjudicators` | `staff.adjudicators` | 230 |
|
|
103
|
+
| `schools.registry` | `schools.list` | 260 |
|
|
104
|
+
| `schools.prints`, `schools.redirects` | `schools.prints`; `schools.redirects` | 184 |
|
|
105
|
+
| `schools.lineage` | `schools.links`, `schools.line`, `schools.lineage` | 184 |
|
|
106
|
+
| `schools.associations` | `schools.associations` | 215 |
|
|
98
107
|
|
|
99
108
|
A spec is `pinned` (the default: the user-local pin, else the latest), `latest`, a cut number
|
|
100
109
|
(`42`, or `42.1` for a fraction) or a tag (`archive-YYYY.MM.DD-N`).
|
|
@@ -201,8 +210,11 @@ s.next; // the next scheduled instance where the release knows one, else n
|
|
|
201
210
|
A series is asked by any id of it (a feis, instance or brand id, a retired one followed), by a
|
|
202
211
|
host code with or without its year (held codes `<stem><yy>` whose two digits are their own year,
|
|
203
212
|
never a host id of digits alone, which is a sequence number), or by a name (a glob, or a plain word read as `*word*`). Two series answer `ambiguous` with both.
|
|
204
|
-
|
|
205
|
-
`
|
|
213
|
+
`next` is the series' earliest occurrence of the feis-index dated on or after the cut's day
|
|
214
|
+
(`rel.upcoming.feises`, state `upcoming`), under its brand id or one retired onto it: `{ feis_id,
|
|
215
|
+
date, date_hi, occurrence_id, name_printed, hosts, captured_id, series_basis }`, `feis_id` the
|
|
216
|
+
first listing's that names one. It is `null` with `next_why` where the feis-index lists none, and
|
|
217
|
+
on a release without `upcoming_feises` (feature `upcoming.feises`).
|
|
206
218
|
|
|
207
219
|
## Schools
|
|
208
220
|
|
|
@@ -227,6 +239,29 @@ rows were published under and their rows, so it agrees with each print lookup of
|
|
|
227
239
|
|
|
228
240
|
Every answer carries the release tag it came from.
|
|
229
241
|
|
|
242
|
+
### The schools in bulk
|
|
243
|
+
|
|
244
|
+
```ts
|
|
245
|
+
await rel.schools.list(); // { schools: [{ school_id, display, regions, places }] }: the registry
|
|
246
|
+
await rel.schools.prints({ event: "<event>", year: 2024 });
|
|
247
|
+
// { prints: [{ event, year, print, school_id, rows }] }
|
|
248
|
+
await rel.schools.redirects(); // { redirects: [{ old_id, new_id, kind, since }] }
|
|
249
|
+
await rel.schools.lineage(); // { edges: [{ id, direction, other, shape, year, provisional,
|
|
250
|
+
// decision, confidence }] }
|
|
251
|
+
await rel.schools.associations({ school_id: "<id>" });
|
|
252
|
+
// { associations: [{ at, seq, date, person, person_printed,
|
|
253
|
+
// person_type, credentials, caption, school_printed, school_id,
|
|
254
|
+
// association_type, src_type, src, candidate_school_id, candidate_rung, ... }] }
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
`prints` is every (print, school id) pair the release's result rows attach in an event-year (the
|
|
258
|
+
print trimmed), with the rows that carry it: an event's (case-blind), a year's, both or every one.
|
|
259
|
+
A row attached to no school is in no pair, and a team result's school is `rel.teams.results`'.
|
|
260
|
+
`lineage` is each edge end as the release publishes it (an edge may carry both ends): `links` and
|
|
261
|
+
`line` are the graph over them. `associations` is the people a directory lists beside a school, as
|
|
262
|
+
evidence of an association, never an identity: `school_id` is the school the print attached to,
|
|
263
|
+
`candidate_school_id` one it reached without attaching.
|
|
264
|
+
|
|
230
265
|
### How two schools are linked
|
|
231
266
|
|
|
232
267
|
```ts
|
|
@@ -550,6 +585,33 @@ await rel.feises.dates(); // every feis id with its first a
|
|
|
550
585
|
await rel.majors.tabulated({ min_true_round: 3 }); // the majors addresses marked to round 3 or later
|
|
551
586
|
```
|
|
552
587
|
|
|
588
|
+
## Marks sheets and panels
|
|
589
|
+
|
|
590
|
+
```ts
|
|
591
|
+
const s = await rel.tabs.query({ competition: "<competition>" }); // or { address }, and a { round }
|
|
592
|
+
s.rows; // [{ address, competition, card, line, event, year, tier, round, true_round, seat_index,
|
|
593
|
+
// section, panel_size, column_order, drop_rule, the judge (name, print, TD number,
|
|
594
|
+
// id, unmatched reason), mark, mark_printed, place, place_printed, tie, points,
|
|
595
|
+
// points_printed }]
|
|
596
|
+
for await (const t of rel.tabs.stream({ tier: ["T1", "T2", "T3"], year: [2015, 2025] })) ...
|
|
597
|
+
await rel.panels.query({ competition: "<competition>" }); // { seats: [{ competition, panel, round,
|
|
598
|
+
// seat_index, address, the judge (print, TD number, id, unmatched reason) }] }
|
|
599
|
+
await rel.feisPanels.query({ address: "fweb:<code>.<comp>" }); // { seats: [{ address, platform, round,
|
|
600
|
+
// seat_index, panel_size, panel_kind, the judge (print, state printed, TD number, id,
|
|
601
|
+
// unmatched reason, basis) }] }
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
A marks sheet is a row per card, round and seat, with the seat's mark, place and points as read
|
|
605
|
+
beside their prints, from `results.sqlite` (every tabulated sheet, the T4 events' too). The stream
|
|
606
|
+
takes an event (or several, case-blind), a year or an inclusive range, tiers, competitions, or
|
|
607
|
+
nothing (every cell), and yields one competition's rows together. A sheet's `event`, `year` and
|
|
608
|
+
`tier` are its competition's: a solo competition's from the results, a team competition's from the
|
|
609
|
+
team results (with the tier the release gives that event-year's solo competitions). A sheet the
|
|
610
|
+
release places in neither carries nulls, and a filter on them never reaches it. `panels` and
|
|
611
|
+
`feisPanels` with nothing named answer every seat. `round` is `rx` where one panel sat every round.
|
|
612
|
+
A seat carries its judge's TD number where the release linked one, else a judge id, else the
|
|
613
|
+
reason it is linked to neither (`TabRow`, `PanelSeat` and `FeisPanelSeat` name the fields).
|
|
614
|
+
|
|
553
615
|
## Teams and event-years
|
|
554
616
|
|
|
555
617
|
```ts
|
|
@@ -591,11 +653,52 @@ every release the `teams` feature names, and `(await rel.capability("teams.field
|
|
|
591
653
|
a release has. The rows are read once per
|
|
592
654
|
release into the `teams` and `events` indexes.
|
|
593
655
|
|
|
656
|
+
## Upcoming feiseanna and their competitor lists
|
|
657
|
+
|
|
658
|
+
```ts
|
|
659
|
+
const o = await rel.upcoming.feises({ state: "upcoming", from: "2026-11-01" });
|
|
660
|
+
o.feises; // [{ occurrence_id, occurrence_ids, name_printed, date_lo, date_hi, year, hosts,
|
|
661
|
+
// feis_brand_id, feis_instance_id, series_basis, brand_candidates, captured_id, state }]
|
|
662
|
+
const f = await rel.upcoming.fields({ state: "pending" }); // state, feis, field_id, from, to
|
|
663
|
+
f.fields; // [{ field_id, feis_id, source, host_id, competition_code, count_only, occurrence_id,
|
|
664
|
+
// name_printed, date_lo, date_hi, year, feis_brand_id, comp, state,
|
|
665
|
+
// results_competitions, results_feis_ids, version, versions, captured_date, sha256,
|
|
666
|
+
// limits, entrants, stated_rows, printed_total }]
|
|
667
|
+
const e = await rel.upcoming.entrants({ field_id: "fweb:ABC26/101" }); // version: an older capture
|
|
668
|
+
e.entrants; // [{ name_printed, school_printed, school_id, yob, arm, candidates, flags,
|
|
669
|
+
// competitions, field_ids, captured_id, row_id, ... }]
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
`upcoming.feises` is every occurrence of the cut's feis-index the release holds no results of:
|
|
673
|
+
`upcoming` (dated on or after the cut's day) or `no-results` (before it), each with every
|
|
674
|
+
platform's or calendar's listing (`hosts`) and its feis series where one was named (`series_basis`
|
|
675
|
+
says how; `none` leaves `feis_brand_id` null, the unjoined ones).
|
|
676
|
+
|
|
677
|
+
A FIELD is one competition a competitor list names, `<feis_id>/<code>`, the same id on every cut. A later capture of the host is a new `version`
|
|
678
|
+
(a capture id; `versions` lists them), never a new field. `state` says how it stands on the cut:
|
|
679
|
+
`pending` (on the list), `results` (the release holds its results, `results_competitions` the
|
|
680
|
+
join), `passed` (its first day is before the cut's day and no result is held) or `withdrawn` (the
|
|
681
|
+
host's newest capture no longer lists it). `comp` is the competition reading of its code (`arm`,
|
|
682
|
+
`level`, `feis_level`, `age`, `population`, `kind`, `title`, `why`), null on a count list.
|
|
683
|
+
`limits` names what the capture cannot show (`registered-not-danced`, `paid-in-full-only`, ...).
|
|
684
|
+
|
|
685
|
+
`upcoming.entrants` answers a field's rows in one version, its current one by default. A
|
|
686
|
+
registrant carries the resolver's `arm` and `candidates`, NEVER A `dancer_id`: a list shows who
|
|
687
|
+
registered, not who danced, and a `unique` row's one candidate is read with its `flags`
|
|
688
|
+
(`initial-only`: a FeisWeb print is a surname and an initial). `count_only` marks a field read from
|
|
689
|
+
a registration-by-school page of the corpus `entrants/` part: its rows are schools' counts
|
|
690
|
+
(`level_counts`), with no names. A QuickFeis registrant list (`transcripts/*.registrationlist.jsonl`)
|
|
691
|
+
is not read into these tables yet. An unknown field or version answers no rows and says
|
|
692
|
+
why. On a release without the tables each call refuses by name.
|
|
693
|
+
|
|
594
694
|
## Teachers and adjudicators
|
|
595
695
|
|
|
596
696
|
```ts
|
|
597
697
|
await rel.staff.teacher("<name>"); // or a TD number
|
|
598
698
|
await rel.staff.adjudicator("<name>");
|
|
699
|
+
await rel.staff.adjudicators({ year: 2025 }); // the register's rows (or a TD number's, or every one):
|
|
700
|
+
// [{ the TD number, year, cat, name_printed, country, country_printed, country_code, region,
|
|
701
|
+
// region_printed, region_code, geohash, src }] (`RegisterRow`)
|
|
599
702
|
```
|
|
600
703
|
|
|
601
704
|
One person per TD number (else per judge id, else per name): the schools taught at (role,
|
|
@@ -747,8 +850,18 @@ is passed to the dancer resolver as asked (`rel.dancers`, above).
|
|
|
747
850
|
idq records --years [--release <spec>] [--dancer <id,...>] [--year <y>]
|
|
748
851
|
idq feis-dates [--release <spec>]
|
|
749
852
|
idq tabulated [--release <spec>] [--min-round <n>]
|
|
853
|
+
idq tabs [--release <spec>] --comp <competition> | --address <address> [--round <r>]
|
|
854
|
+
idq tabs --stream [--release <spec>] [--comp <c,...>] [--event <e,...>] [--year <y> | --year <from>..<to>] [--tier <t,...>]
|
|
855
|
+
idq panels [--release <spec>] [--comp <competition>]
|
|
856
|
+
idq feis-panels [--release <spec>] [--address <feis competition>] [--platform <p>]
|
|
857
|
+
idq register [--release <spec>] [--year <y>] [--td <TD number>]
|
|
858
|
+
idq schools [--release <spec>] [--prints [--event <e>] [--year <y>] | --redirects | --lineage
|
|
859
|
+
| --associations [--school <school_id>]]
|
|
750
860
|
idq teams [--release <spec>] [--event <e>] [--year <y>] [--rosters | --joins]
|
|
751
861
|
idq events [--release <spec>] [--event <e>] [--year <y>]
|
|
862
|
+
idq upcoming [--release <spec>] [--state <s,...>] [--feis <id>] [--from <date>] [--to <date>]
|
|
863
|
+
idq upcoming --entrants <field_id> [--version <capture id>]
|
|
864
|
+
idq upcoming --feises [--state upcoming|no-results] [--brand <series>] [--from <date>] [--to <date>]
|
|
752
865
|
idq teacher [--release <spec>] <name|TD number>
|
|
753
866
|
idq adjudicator [--release <spec>] <name|TD number>
|
|
754
867
|
idq comp [--release <spec>] <feis> <code> [--year y] [--title t]
|
|
@@ -759,7 +872,7 @@ is passed to the dancer resolver as asked (`rel.dancers`, above).
|
|
|
759
872
|
[--oireachtas <region>[:<year>]]
|
|
760
873
|
idq resolve registrations
|
|
761
874
|
|
|
762
|
-
`stream` prints one JSON line per row (or entry), as it reads them. `dancer` prints the results of the one dancer where the answer is unique (every candidate's with
|
|
875
|
+
`stream` (and `tabs --stream`) prints one JSON line per row (or entry, or cell), as it reads them. `dancer` prints the results of the one dancer where the answer is unique (every candidate's with
|
|
763
876
|
`--rows`). `--json` prints the call's answer as it is. `--cache` and `--repo` override the defaults.
|
|
764
877
|
|
|
765
878
|
`update` moves to the newest published release, as a package manager's `update` moves to the newest
|